计时器不会在 swift 停止
Timer doesn't stop on swift
现在我学习了 Timer(),我可以成功触发它,但即使我调用 invalidate() 它也不会停止。我该如何解决这个问题?我使用 Xcode 11.1.
我会展示一些代码和日志。
这是 ContentView.swift,只需编辑一下即可获得默认按钮。
ContentView.swift
import SwiftUI
struct ContentView: View {
var body: some View {
Button(action: {
// What to perform
let timerFire = TimerFire()
timerFire.FireTimer()
}) {
// How the button looks like
Text("Button")
}
}
}
这是TimerFire.swift。它会触发定时器,然后如果定时器计数达到 5,它应该停止定时器
TimerFire.swift
import Foundation
import UIKit
import SwiftUI
let TIME_MOVENEXT = 5
var timerCount : Int = 0
class TimerFire : ObservableObject{
var workingTimer = Timer()
@objc func FireTimer() {
print("FireTimer")
var workingTimer = Timer()
workingTimer = Timer.scheduledTimer(timeInterval: 1,
target: self,
selector: #selector(TimerFire.timerUpdate),
userInfo: nil,
repeats: true)
}
@objc func timerUpdate(timeCount: Int) {
timerCount += 1
let timerText = "timerCount:\(timerCount)"
print(timerText)
if timerCount == TIME_MOVENEXT {
print("timerCount == TIME_MOVENEXT")
workingTimer.invalidate() //here i call invalidate(), but it doesn't stop
print("workingTimer.invalidate()")
}
}
}
这是我运行这段代码的日志。
日志
timerCount:1
timerCount:2
timerCount:3
timerCount:4
timerCount:5
timerCount == TIME_MOVENEXT
workingTimer.invalidate()
timerCount:6
timerCount:7
调用workingTimer.invalidate()后,计时器仍然有效。有人可以帮助我吗?
您正在 FireTimer()
函数中创建另一个具有相同名称的计时器实例,只需删除并尝试
现在我学习了 Timer(),我可以成功触发它,但即使我调用 invalidate() 它也不会停止。我该如何解决这个问题?我使用 Xcode 11.1.
我会展示一些代码和日志。
这是 ContentView.swift,只需编辑一下即可获得默认按钮。 ContentView.swift
import SwiftUI
struct ContentView: View {
var body: some View {
Button(action: {
// What to perform
let timerFire = TimerFire()
timerFire.FireTimer()
}) {
// How the button looks like
Text("Button")
}
}
}
这是TimerFire.swift。它会触发定时器,然后如果定时器计数达到 5,它应该停止定时器 TimerFire.swift
import Foundation
import UIKit
import SwiftUI
let TIME_MOVENEXT = 5
var timerCount : Int = 0
class TimerFire : ObservableObject{
var workingTimer = Timer()
@objc func FireTimer() {
print("FireTimer")
var workingTimer = Timer()
workingTimer = Timer.scheduledTimer(timeInterval: 1,
target: self,
selector: #selector(TimerFire.timerUpdate),
userInfo: nil,
repeats: true)
}
@objc func timerUpdate(timeCount: Int) {
timerCount += 1
let timerText = "timerCount:\(timerCount)"
print(timerText)
if timerCount == TIME_MOVENEXT {
print("timerCount == TIME_MOVENEXT")
workingTimer.invalidate() //here i call invalidate(), but it doesn't stop
print("workingTimer.invalidate()")
}
}
}
这是我运行这段代码的日志。 日志
timerCount:1
timerCount:2
timerCount:3
timerCount:4
timerCount:5
timerCount == TIME_MOVENEXT
workingTimer.invalidate()
timerCount:6
timerCount:7
调用workingTimer.invalidate()后,计时器仍然有效。有人可以帮助我吗?
您正在 FireTimer()
函数中创建另一个具有相同名称的计时器实例,只需删除并尝试