我一直在尝试在Swift中使用Timer,我将它简化为以下内容:
func startTimer () {
timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(ViewController.test), userInfo: nil, repeats: true)
}
func test () {
print("FIRED")
}
我想从另一个函数调用此函数并验证startTimer函数是否正常工作,但计时器不会触发。这与RunLoop有关吗?我对编码很新,所以任何解释都会受到赞赏。
答案 0 :(得分:18)
良好实践:在startTimer()中检查是否尚未创建计时器并进行分配。在stopTimer()中,在调用invalidate之前检查计时器是否存在,并将计时器设置回nil。
此外,对于您的选择器,请确保您拥有@obj前缀。您应该能够使用提供的代码获得工作计时器。快乐的编码!
class SomeClass {
var timer: Timer?
func startTimer() {
guard timer == nil else { return }
timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(test), userInfo: nil, repeats: true)
}
func stopTimer() {
guard timer != nil else { return }
timer?.invalidate()
timer = nil
}
@objc func test() {
}
}