簡體   English   中英

iOS Swift - 在#invalidate() 上阻止定時器#fire()

[英]iOS Swift - Prevent Timer #fire() on #invalidate()

給定以下代碼

private var myTimer: Timer? = nil

override func viewDidLoad() {
   super.viewDidLoad()
   // start my Timer
   startMyTimer()
   
   // stop timer and restart
   DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(3)) {
      self.myTimer!.fire()
      print("my timer: invalidating \(Date.now.mediumTimeLocalizedDescription)")
      self.myTimer!.invalidate()
      self.myTimer = nil
      self.startMyTimer()
   }
}

private func startMyTimer() {
   myTimer = Timer.scheduledTimer(withTimeInterval: 10, repeats: true) { timer in
      print("my timer: Fired \(Date.now.mediumTimeLocalizedDescription)")
   }
   myTimer!.fire()
}

我得到以下 output:

my timer: Fired 14:27:14
my timer: Fired 14:27:17
my timer: invalidating 14:27:17
my timer: Fired 14:27:17
my timer: Fired 14:27:27

預計 output:

my timer: Fired 14:27:14
my timer: Fired 14:27:17
my timer: invalidating 14:27:17
my timer: Fired 14:27:27

正如您所看到的,當我使計時器失效時立即觸發!

有什么辦法可以防止這種情況發生嗎?

我查看了 Apple 文檔,它指出“停止計時器再次觸發並請求將其從運行循環中刪除。” 我將其解釋為“當您無效時,計時器不再觸發”。 我錯了嗎?

你在 DispatchQueue.main.asyncAfter 完成后再次調用 startMyTimer() 。 在此 function 中,您初始化計時器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM