2016-11-03 3 views
2

В приложении Swift я использую таймер. Я предпочитаю не хранить ссылку на таймер после того, как я его создам, и вставить его в Runloop. Я хочу иметь возможность аннулировать его. Есть ли способ сделать это, не поддерживая ссылку?Как сделать недействительным таймер, помещенный в RunLoop

ответ

3

Селектор таймера может хранить ссылку на объект Timer. Попробуйте следующее:

class ViewController: UIViewController { 
    var count = 0 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let _ = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.timerFired(timer:)), userInfo: nil, repeats: true) 
    } 

    // Run the timers for 3 times then invalidate it 
    func timerFired(timer: Timer) { 
     if count < 3 { 
      count += 1 
      print(count) 
     } else { 
      timer.invalidate() 
      print("Timer invalidated") 
     } 
    } 
} 
+0

Ahh, блестящий! Именно то, что я имел в виду. Не унывайте. – dugla

Смежные вопросы