gpt4 book ai didi

ios - 迅速3检查计时器是否正在运行

转载 作者:行者123 更新时间:2023-12-01 19:52:15 25 4
gpt4 key购买 nike

我正在编写计时器函数以检查其当前是否正在运行,但是似乎总是发现计时器变量为nil。这样就可以继续创建新的计时器实例。

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

关于ios - 迅速3检查计时器是否正在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45034386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com