快速 3 检查计时器是否正在运行



我正在编写计时器函数来检查它当前是否正在运行,但似乎我总是发现计时器变量为零。以便它不断创建新的计时器实例。

weak var myTimer: Timer?
// starting a timer
func startTimer(timer: Timer?, interval: Double, _selector: Selector, _repeats: Bool){
weak var _timer = timer
if (_timer == nil){
_timer = Timer.scheduledTimer(timeInterval: interval, target: self, selector: _selector, userInfo: nil, repeats: _repeats)
}
}
// stopping a timer
func stopTimer(timer: Timer?){
var _timer = timer
if (_timer != nil){
_timer!.invalidate()
_timer = nil
}
}

通过调用启动计时器

self.startTimer(timer: self.myTimer, interval: 0.1, _selector: #selector(self.updateTimer), _repeats: true)

不知何故,即使在计时器启动后,它仍然是零。因此,第二次调用该函数时,它将调度另一个计时器实例。当我试图阻止它时,它不会成功,因为它总是零。我该如何解决这个问题?

谢谢

这是意料之中的。您正在将新的 Timer 实例分配给函数内部的weak var,这将导致在退出函数作用域时将其释放。函数的timer变量必须声明为inout

func startTimer(timer: inout Timer?, interval: Double, _selector: Selector, _repeats: Bool) {
if (timer == nil){
timer = Timer.scheduledTimer(timeInterval: interval, target: self, selector: _selector, userInfo: nil, repeats: _repeats)
}

第二个函数也是如此 - 您只将nil分配给函数作用域内的局部变量,而不是函数作用域外的变量。

最新更新