如何使多次启动的NSTimer失效
我在Swift做了一个实践项目来学习NSTimer
如何工作。 有一个button启动计时器和一个button来使其失效。 当我点击每个button一次,它工作正常。 但是,当我多次点击启动定时器button时,我不再能使其无效。
这是我的代码:
class ViewController: UIViewController { var counter = 0 var timer = NSTimer() @IBOutlet weak var label: UILabel! @IBAction func startTimerButtonTapped(sender: UIButton) { timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: "update", userInfo: nil, repeats: true) } @IBAction func cancelTimerButtonTapped(sender: UIButton) { timer.invalidate() } func update() { ++counter label.text = "\(counter)" } }
我已经看到了这些问题,但是我无法从他们那里收集到我的问题的答案(很多是旧的Obj-C
pre-ARC
日子,其他的都是不同的问题):
- NSTimer() – timer.invalidate不工作在一个简单的秒表?
- 在Swift中使用NSTimer
- NSTimer不停止
- 无法使NSTimer无效(停止)
- NSTimer不会因无效而停止
- 不能无效,停止倒计时NSTimer – Objective C
- IOS:停止NSTimer
如果要在每次点击“开始”button时重置计时器,则可以在startTimerButtonTapped
启动新的计时器之前添加timer.invalidate()
:
@IBAction func startTimerButtonTapped(sender: UIButton) { timer.invalidate() timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: "update", userInfo: nil, repeats: true) }
我正在更新一个解释,但@jcaron已经在评论中,所以我只是引用他的文字,不需要改变它:
每次点击“开始计时器”button,您将创build一个新的计时器,同时保留前一个计时器,但不参考它(因为您已经用刚刚创build的新计时器覆盖了
timer
)。 在创build新的之前,您需要先使其无效。
我想build议你按下取消button时,设置计时器为零。 并且不要忘记设置计数器= 0使计时器无效。