我们调用startTimer函数来启动计时器。当我们想停止它时,我们调用stopTimerTest函数,但是在调用stopTimer函数后,timerTestAction继续触发。为了检查计时器条件,我们使用了print并在timerActionTest中返回了nil。

var timerTest: Timer? = nil

func startTimer () {
    timerTest =  Timer.scheduledTimer(
        timeInterval: TimeInterval(0.3),
        target      : self,
        selector    : #selector(ViewController.timerActionTest),
        userInfo    : nil,
        repeats     : true)
}

func timerActionTest() {
    print(" timer condition \(timerTest)")
}

func stopTimerTest() {
    timerTest.invalidate()
    timerTest = nil
}

最佳答案

尝试对您的代码进行以下更改:

首先,您必须更改声明timerTest的方式

var timerTest : Timer?

然后在实例化之前先在startTimer中检查timerTest是否为nil
func startTimer () {
  guard timerTest == nil else { return }

  timerTest =  Timer.scheduledTimer(
      timeInterval: TimeInterval(0.3),
      target      : self,
      selector    : #selector(ViewController.timerActionTest),
      userInfo    : nil,
      repeats     : true)
}

最后,在stopTimerTest中,如果它不是nil,则使timerTest无效
func stopTimerTest() {
  timerTest?.invalidate()
  timerTest = nil
}

关于timer - 使用Swift 3停止ScheduledTimer,即使Timer为零,Timer也会继续触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40081574/

10-10 21:39