Timer 计时器不会失效

Timer 计时器不会失效,timer,swift3,Timer,Swift3,我不能使快速计时器失效 定义对象和变量时,我使用 var scoreTimer = Timer() scoreTimer.invalidate() 当两个对象与此行碰撞时,我启动计时器: scoreTimer = Timer.scheduledTimer(timeInterval: 0.05, target: self, selector: #selector(updatePassengerScore), userInfo: nil, repeats: true) 我的updatePass

我不能使快速计时器失效

定义对象和变量时,我使用

var scoreTimer = Timer()
scoreTimer.invalidate()
当两个对象与此行碰撞时,我启动计时器:

scoreTimer = Timer.scheduledTimer(timeInterval: 0.05, target: self, selector: #selector(updatePassengerScore), userInfo: nil, repeats: true)
我的updatePassengerScore方法如下所示

    passengerScore -= 1
    scoreLabel.text = String(passengerScore)
当检测到另一个碰撞时,我尝试用

var scoreTimer = Timer()
scoreTimer.invalidate()
但是变量passengerScore仍然在减少,我不知道为什么会出现这种情况。
有人有办法解决这个问题并让计时器停止吗?我读到的每个线程都说scoreTimer.invalidate()实际上应该停止计时器。我真的很困惑:-/

您可能启动了多个计时器。如果在当前计时器失效之前点击创建计时器的代码行,那么将有两个活动计时器,其中只有一个可以失效

要防止这种可能性,请在创建新计时器之前,在
scoreTimer
上调用
invalidate

scoreTimer.invalidate()
scoreTimer = Timer.scheduledTimer(timeInterval: 0.05, target: self, selector: #selector(updatePassengerScore), userInfo: nil, repeats: true)

另一种处理方法是将
scoreTimer
更改为可选,然后仅在
scoreTimer
nil
时创建计时器

var scoreTimer: Timer?

...

if scoreTimer == nil {
    scoreTimer = Timer.scheduledTimer(...
}

...

scoreTimer?.invalidate()
scoreTimer = nil