从另一个函数中取消Swift定时器

时间:2017-07-23 07:15:43

标签: swift

我正在使用找到here的Swift Timer库。它允许您运行计时器,然后使用以下语法将其停止:

Timer.every(5.seconds) { (timer: Timer) in
    // do something

    if finished {
        timer.invalidate()
    }
}

我试图让计时器启动,然后可以选择从另一个功能取消计时器,但我无法弄清楚如何引用从另一个功能倒计时的计时器。我尝试过这样的事情,但它会引发以下错误:

  

静态成员every不能用于Timer

类型的实例
   var countTimer = Timer()

        override func viewDidLoad() {
            super.viewDidLoad()

            initNotificationSetupCheck()

           countTimer.every(5.seconds) { //error here

        }

     func stopTimer() {

           countTimer.invalidate()

           }

2 个答案:

答案 0 :(得分:1)

如果您使用两者的混合,但是不是创建Timer的实例,而是将闭包内的计时器分配给您的成员变量,如下所示:

var countTimer: Timer
Timer.each(5.seconds) { timer in
    countTimer = timer
    //rest of code
}

然后,如果需要,您可以在闭包之外使计时器无效。

答案 1 :(得分:0)

你可以这样

self.timer = Timer.scheduledTimer(timeInterval: 5, target: self,
                                  selector: #selector(self.eventForTimer), userInfo: nil, repeats: true)

取消计时器

func cancelTimer() {
    self.timer.invalidate()
}