我正在编写计时器函数来检查它当前是否正在运行,但似乎我总是发现计时器变量为零。这样它就不断创建一个新的计时器实例。
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)
不知何故,即使在计时器启动后,它仍然是零。因此,第二次调用该函数时,它将调度另一个计时器实例。当我试图阻止它时,它将不会成功,因为它总是为零。我怎么解决这个问题?
感谢
答案 0 :(得分:2)
这是预期的。您正在将新的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
分配给函数范围内的局部变量,而不是外部变量。