[英]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.