Swift 3计时器未触发

Oli*_*man 10 timer ios swift

我一直在尝试在Swift中使用Timer,我将它简化为以下内容:

func startTimer () {
    timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(ViewController.test), userInfo: nil, repeats: true)
}
func test () {
    print("FIRED")
}
Run Code Online (Sandbox Code Playgroud)

我想从另一个函数调用此函数并验证startTimer函数是否有效,但计时器不会触发.这与RunLoop有关吗?我对编码很新,所以任何解释都会受到赞赏.

Ale*_*air 20

好的做法:在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() {

    }
}
Run Code Online (Sandbox Code Playgroud)

  • 但它使用可选链接,如果timer为nil,则不会调用invalidate (7认同)
  • 为什么在将其设置为nil之前检查其nil是否重要 (2认同)
  • 确实如此!@RPCarson。 (2认同)