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

时间:2017-07-11 12:16:55

标签: ios swift3 timer

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

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)

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

感谢

1 个答案:

答案 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分配给函数范围内的局部变量,而不是外部变量。