[英]iOS Swift - Prevent Timer #fire() on #invalidate()
Given the following code给定以下代码
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()
}
I get the following output:我得到以下 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
Expected output:预计 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
As you can see when I invalidate the timer fires right away!正如您所看到的,当我使计时器失效时立即触发!
Is there any way to prevent that?有什么办法可以防止这种情况发生吗?
I looked Apple documentation and it states "Stops the timer from ever firing again and requests its removal from its run loop."我查看了 Apple 文档,它指出“停止计时器再次触发并请求将其从运行循环中删除。” which I interpret as "When you invalidate, the timer does not fire anymore".我将其解释为“当您无效时,计时器不再触发”。 Am I wrong?我错了吗?
You call startMyTimer() again in DispatchQueue.main.asyncAfter completion.你在 DispatchQueue.main.asyncAfter 完成后再次调用 startMyTimer() 。 In this function you initialize timer.在此 function 中,您初始化计时器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.