質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

2592閲覧

Swift 簡単なアラームアプリ コードの書き方の質問

Amyz_S

総合スコア12

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2017/01/08 05:52

編集2017/01/08 06:46

Swift初心者です。簡単なアラームアプリを作りたいと思っています。

まずクラスに、
イメージ説明
を作成しました。

現在ViewControllerにインスタンスを生成し、コードを書いています。

現在やりたいことは、
①MainStoryBoardに設置したUISwitch Buttonをオンにすると、クラスに定義した「vibration」のBool型にon/offと、コンソール上に出力させる

②同様にMainStoryBoard上のUIDatePickerで日にち・時間を選択すると、クラスに定義した「time」のDate型に、yyyy/MM/dd HH:mmのフォーマットで、コンソール上に出力させる

です。
今のところここまで進みました。
イメージ説明
エラーが出てしまいRun出来ない状態で、途方に暮れております。
また、②のDatePickerで時間を表示させるやり方が分からず、苦戦しております。

稚拙な説明で分かりづらいかと思いますが、どうかご教示頂けると幸いです。
よろしくお願い致します。


追記:
コメントありがとうございます。

こちらがクラスを定義したコードで、

swift

1import Foundation 2//Alarm型の定義 3class Alarm { 4 var title: String? 5 var time: Date? 6 var duration: Int? 7 var musicURL: String? 8 var vibration: Bool? 9 } 10 11func initialAlarm() -> Alarm { 12 return Alarm() 13}

こちらが現在コードを書いているViewControllerです。

swift

1// 2// AlarmCreateViewController.swift 3// share_alarm 4// 5// Created by -- on 2016-12-11. 6// Copyright © 2016 --. All rights reserved. 7// 8 9import Foundation 10import UIKit 11 12class AlarmCreateViewController: UIViewController { 13 var alarm: Alarm = initialAlarm() 14 15 //Durationを入力 16 //When the value of Int is written within UITextField named sender, the values are inserted into the variants "duration" in the class "Alarm". 17 @IBAction func input(_ sender: UITextField) { 18 if let text = sender.text { 19 if let duration = Int(text){ 20 alarm.duration = duration 21 } 22 } 23 dump(alarm) 24 } 25 26 //Titleを入力 27 //When the value of String is written within UITextField named sender, the values are inserted into the variants "title" in the class "Alarm". 28 @IBAction func titleText(_ sender: UITextField) { 29 if let text2 = sender.text { 30 if let title = String(text2){ 31 alarm.title = title 32 } 33 dump(alarm) 34 } 35 } 36 37 //vibrationをオン・オフにする 38 //When the UISwitch is on, the state of vibration "on" is inserted into the variants "vibration" in the class "Alarm". 39 @IBAction func onOffSwitch(_ sender: UISwitch) { 40 let buttonState: Bool = sender.isOn 41 if sender.isOn { 42 let vibrationState = Bool(true) 43 alarm.vibration = vibrationState 44 dump(alarm) 45 }else{ 46 let vibrationState = Bool(false) 47 alarm.vibration = vibrationState 48 dump(alarm) 49 } 50 } 51 52 53 54 override func viewDidLoad() { 55 super.viewDidLoad() 56 // Do any additional setup after loading the view, typically from a nib. 57 } 58 59 override func didReceiveMemoryWarning() { 60 super.didReceiveMemoryWarning() 61 // Dispose of any resources that can be recreated. 62} 63}

エラーは、

swift

1 let buttonState: Bool = sender.isOn

で出ております。
行き詰まっており、どうしたらよいのか分からない状態で、、お手数ですが、どうかよろしくお願い致します。

ーーーーーー
追記2 新たなエラー

Swift

1 //vibrationをオン・オフにする 2 //When the UISwitch is on, the state of vibration "on" is inserted into the variants "vibration" in the class "Alarm". 3 @IBAction func onOffSwitch(_ sender: UISwitch) { 4 var buttonState: Bool = sender.isOn 5 if buttonState == true{ 6 var vibrationState = Bool(on) 7 alarm.vibration = vibrationState 8 dump(alarm) 9 }else{ 10 let vibrationState = Bool(off) 11 alarm.vibration = vibrationState 12 dump(alarm) 13 } 14 }

エラーは、

swift

1var vibrationState = Bool(on) 23var vibrationState = Bool(off) 4

に出ております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_Kentarou

2017/01/08 05:59

全体的な作りが分からないので対象のコードを全て載せてもらってもいいですか?(画像でなくて)どの場所でエラーが起きているのかも分からないです。
guest

回答1

0

ベストアンサー

まずlet buttonState: Bool = sender.isOnはエラーでは無くワーニング(警告)です。
buttonState変数を定義したのに使用されていないよという警告です。

エラーが出てしまいRun出来ない状態で

と書いてありますがどの部分でエラーが出ているのでしょうか?上記のワーニングはRunはできると思いますので。

②に関しては以下のサイトを参考にするとできると思います。
UIDatePickerの表示

投稿2017/01/08 06:22

編集2017/01/08 07:37
_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Amyz_S

2017/01/08 06:45

ご親切にコメント頂き感謝しております。 確認したところワーニングでした。失礼いたしました。 エラーはAppDelegateのところに{//Thread1: signal SIGABRT.と出ていました。 現在コードを見直し書きなおしたところ、違うエラーが出てしまい、「Use of unresolved identifier “on”」「Use of unresolved identifier “off”」と出ております。対象のコードを追記にアップさせて頂きます。非常に恐縮ですが、ご教示頂けると幸いです。よろしくお願い致します。
_Kentarou

2017/01/08 06:56

Boolはtrueかfalseなのでon、offではありませんよ。 やっている事は変数の代入して更に代入してということなので以下でよいのでは? @IBAction func onOffSwitch(_ sender: UISwitch) { alarm.vibration = sender.isOn }
_Kentarou

2017/01/08 06:59

> エラーはAppDelegateのところに{//Thread1: signal SIGABRT.と出ていました。 おそらくコンソールにエラーが出ていると思うのでそちらを載せてください。
Amyz_S

2017/01/08 07:49

ご返信ありがとうございます。 Boolの使い方とコードのヒントもありがとうございます。 @IBAction func onOffSwitch(_ sender: UISwitch) { alarm.vibration = sender.isOn } 以上で書き直し、runを試みたところ、コンソールには 2017-01-08 16:42:41.985 share_alarm[22797:731361] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<share_alarm.AlarmCreateViewController 0x7f97a5c19930> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key Vibration.' *** First throw call stack: ( 0 CoreFoundation 0x000000010cde3d4b __exceptionPreprocess + 171 1 libobjc.A.dylib 0x000000010a1e221e objc_exception_throw + 48 2 CoreFoundation 0x000000010cde3c99 -[NSException raise] + 9 3 Foundation 0x0000000109cf09df -[NSObject(NSKeyValueCoding) setValue:forKey:] + 291 4 UIKit 0x000000010a84c293 -[UIViewController setValue:forKey:] + 88 5 UIKit 0x000000010aac079e -[UIRuntimeOutletConnection connect] + 109 6 CoreFoundation 0x000000010cd889e0 -[NSArray makeObjectsPerformSelector:] + 256 7 UIKit 0x000000010aabf122 -[UINib instantiateWithOwner:options:] + 1867 8 UIKit 0x000000010a8529c5 -[UIViewController _loadViewFromNibNamed:bundle:] + 386 9 UIKit 0x000000010a8532e7 -[UIViewController loadView] + 177 10 UIKit 0x000000010a85361c -[UIViewController loadViewIfRequired] + 201 11 UIKit 0x000000010a85a062 -[UIViewController __viewWillAppear:] + 118 12 UIKit 0x000000010a8851d3 -[UINavigationController _startCustomTransition:] + 1290 13 UIKit 0x000000010a895e48 -[UINavigationController _startDeferredTransitionIfNeeded:] + 697 14 UIKit 0x000000010a896fdb -[UINavigationController __viewWillLayoutSubviews] + 58 15 UIKit 0x000000010aa8ddd7 -[UILayoutContainerView layoutSubviews] + 223 16 UIKit 0x000000010a776ab8 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1237 17 QuartzCore 0x000000010fc29bf8 -[CALayer layoutSublayers] + 146 18 QuartzCore 0x000000010fc1d440 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 19 QuartzCore 0x000000010fc1d2be _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 20 QuartzCore 0x000000010fbab318 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 280 21 QuartzCore 0x000000010fbd83ff _ZN2CA11Transaction6commitEv + 475 22 UIKit 0x000000010a6aad9b _UIApplicationFlushRunLoopCATransactionIfTooLate + 206 23 UIKit 0x000000010aeb577c __handleEventQueue + 5672 24 CoreFoundation 0x000000010cd88761 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 25 CoreFoundation 0x000000010cd6d98c __CFRunLoopDoSources0 + 556 26 CoreFoundation 0x000000010cd6ce76 __CFRunLoopRun + 918 27 CoreFoundation 0x000000010cd6c884 CFRunLoopRunSpecific + 420 28 GraphicsServices 0x000000010ed23a6f GSEventRunModal + 161 29 UIKit 0x000000010a6b1c68 UIApplicationMain + 159 30 share_alarm 0x0000000109bfef1f main + 111 31 libdyld.dylib 0x000000010dd9368d start + 1 32 ??? 0x0000000000000001 0x0 + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb) と表示されております。
_Kentarou

2017/01/08 08:05

Vibrationという名前のパーツがエラーの様にかいてありますが、コードとStoryboardをひも付けたパーツでそのような名前のパーツを結んだ覚えはありますか? またその名前をコード側で変更しましたか?
_Kentarou

2017/01/08 08:09 編集

それと以下の様な記述がありますが、var alarm: Alarm = Alarm() と同じ事なのでメソッドを作る必要がないかと思います。 func initialAlarm() -> Alarm { return Alarm() }
Amyz_S

2017/01/08 08:24

ご返信大変感謝しております。また、何度も何度も質問し、申し訳ありません。 確認したところ、ViewControllerのパーツの名前がなぜかVibrationという名前に置き換わっていたため、1からやり直しコードを書いたところ問題無く動きました。動いた時は涙が出ました。。。どうもありがとうございます。 また、メソッドに関してのアドバイスもありがとうございます。 Duration, Title, Vibrationは希望通りにクラスの変数に代入され、コンソールに出力されるようになったので、残りのUIDatePickerのコードも書いていきたいと思います。
Amyz_S

2017/01/08 08:26

教えて頂いたサイトを参考に書いて見ます!!!本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問