开发者社区> 问答> 正文

计时器不会在快速计时器上停止

现在我学习了timer(),我可以成功地触发它,但是它不会停止,即使我调用了false(),我如何解决这个问题呢?我使用Xcode 11.1。

我会给你看一些密码和日志。

这是ContentView.Swive,只需编辑一个默认按钮即可。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")
        }
    }
}

我是蒂默费尔斯威夫特。它会触发计时器,如果计时器计数达到5,它应该停止计时器TimerFire。

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.voidance()之后,Timer仍然工作。有人能帮我吗?

展开
收起
游客5akardh5cojhg 2019-12-25 16:28:50 4569 0
1 条回答
写回答
取消 提交回答
  • 您正在内部创建另一个计时器实例。FireTimer()函数的名称相同,只需删除并尝试

    2019-12-25 16:29:04
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载