Swift
1import UIKit 2 3class ViewController: UIViewController { 4 5 let eggTime = ["Soft": 300, "Medium": 420, "Hard": 720] 6 var secondsRemaining = 0 7 8 @IBAction func Button(_ sender: UIButton) { 9 timer.invalidate() 10 secondsRemaining = eggTime[sender.currentTitle!]! 11 Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.timerUpdate), userInfo: nil, repeats: true) 12 } 13 14 @objc func timerUpdate() { 15 16 if secondsRemaining >= 0 { 17 print("(secondsRemaining) seconds") 18 secondsRemaining -= 1 19 } 20 } 21}
ボタンを複数回押した時にその都度、タイマーがリセットされ時間の進み方も早くならないようにするために
Swift
1var timer = Timer() 2//を追加して 3Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.timerUpdate), userInfo: nil, repeats: true) 4//????を????に変更して 5timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.timerUpdate), userInfo: nil, repeats: true) 6 7timer.invalidate() 8//を追加しました。
最終的に
Swift
1import UIKit 2 3class ViewController: UIViewController { 4 5 let eggTime = ["Soft": 300, "Medium": 420, "Hard": 720] 6 var secondsRemaining = 0 7 var timer = Timer() 8 9 @IBAction func Button(_ sender: UIButton) { 10 timer.invalidate() 11 secondsRemaining = eggTime[sender.currentTitle!]! 12 timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.timerUpdate), userInfo: nil, repeats: true) 13 } 14 15 @objc func timerUpdate() { 16 17 if secondsRemaining >= 0 { 18 print("(secondsRemaining) seconds") 19 secondsRemaining -= 1 20 } 21 } 22} 23
になったのですが
Swift
1invalidate()
を使うためになぜあの変更が必要だったかわかりません。
ご教示いただけるとありがたいです。
あなたの回答
tips
プレビュー