起きている問題
slider
で取得した値をラベルセットして、1つのボタンでタイマーのON(起動)、OF(リセット)ができるようにしたい。
slider
で値を取得、ラベルに表示までできたが、タイマー起動のボタンを押すと以下のようなエラーになってしまいます。
エラー内容
Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
問題があるコード
swift
1@IBAction func countDownBtn(_ sender: UIButton) { 2 count = Int(timerLabel.text!)! * 60 3 4 5 if timer.isValid == true { 6 //timerを破棄する 7 timer.invalidate() 8 //ボタンのタイトル変更. 9 sender.setTitle("ギブアップ", for: UIControl.State.normal) 10 } 11 else { 12 timer = Timer.scheduledTimer(timeInterval: 1.0, target:self, selector: #selector(self.timerAction(sender:)), userInfo: nil, repeats: true) 13 14 } 15 16 }
##全体のコード
swift
1import UIKit 2 3class HomeVC: UIViewController { 4 5 var count:Int = 0 6 var timer:Timer! 7 8 @IBOutlet weak var timerLabel: UILabel! 9 @IBOutlet weak var secondLabel: UILabel! 10 @IBAction func currentSliderValue(_ sender: UISlider) { 11 12 let sliderValue:Int = Int(sender.value) 13 //5分間隔で表示させる 14 timerLabel.text = String(sliderValue*5) 15 } 16 17 18 override func viewDidLoad() { 19 super.viewDidLoad() 20 21 } 22 23 24 @IBAction func countDownBtn(_ sender: UIButton) { 25 count = Int(timerLabel.text!)! * 60 26 27 28 if timer.isValid == true { 29 //timerを破棄する 30 timer.invalidate() 31 //ボタンのタイトル変更. 32 sender.setTitle("ギブアップ", for: UIControl.State.normal) 33 } 34 else { 35 timer = Timer.scheduledTimer(timeInterval: 1.0, target:self, selector: #selector(self.timerAction(sender:)), userInfo: nil, repeats: true) 36 37 } 38 39 } 40 41 @objc func timerAction(sender:Timer) { 42 count -= 1 43 print(count) 44 45 // %02d:分・秒を2桁表示 46 let sMinute = String(format:"%02d", count/60) 47 let sSecond = String(format:"%02d", count%60) 48 49 timerLabel.text = sMinute 50 secondLabel.text = sSecond 51 52 53 } 54 55 56}
##補足
サンプルコードでは、viewDidLoad
でタイマーを起動させて、タイマーを起動(nil)ではないようにしていますが、今回作りたいのはスライダー値(タイマーの時間)をセットして、ボタンをタップしてからタイマーを起動させたいので、使えないです。
こちらの問題について、原因が分かる方、コードの書き方含めてご指摘頂ければ助かります。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/20 00:57