计时器不会快速停止

时间:2019-12-25 02:57:44

标签: ios swift timer swiftui swift5

现在我学习了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()之后,计时器仍然有效。有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

您正在systemctl status YOUR_SERVICE_NAME 函数内创建同名计时器的另一个实例,只需删除并尝试