You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Timer类计数未递增问题求助:代码无报错但计数无法增长

问题分析与解决方法

嘿,我一眼就瞅出你代码里的问题啦!你的计数始终没法递增,核心原因是**count变量的作用域不对**——你把它声明在myTestFunc()函数内部了:

@objc func myTestFunc() {
    var count = 0 // 每次调用这个函数,count都会被重新初始化为0
    count+=1
    myTimerLabel.text = String(count)
}

每次定时器触发调用myTestFunc()时,都会重新创建一个count变量并赋值为0,然后加1变成1,所以标签永远显示1,看起来完全没递增。


解决方法1:把count改成实例变量(最直观的方式)

把count移到类的作用域里,让它成为一个能在多次函数调用间保持值的属性:

@IBOutlet weak var myTimerLabel: UILabel!
var count = 0 // 把count变成实例变量,放在函数外面

@objc func myTestFunc() {
    count += 1
    myTimerLabel.text = String(count)
}

override func viewDidLoad() {
    Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(myTestFunc), userInfo: nil, repeats: true)
}

这样每次调用myTestFunc()时,都会累加同一个count变量的值,标签就能正常显示递增的数字了。


解决方法2:用闭包式Timer(更符合Swift现代写法)

如果你不想额外声明实例变量,可以用Timer.scheduledTimer(withTimeInterval:repeats:block:)的闭包形式,让计数变量被闭包捕获,持续保持状态:

@IBOutlet weak var myTimerLabel: UILabel!

override func viewDidLoad() {
    var count = 0
    Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { [weak self] timer in
        count += 1
        self?.myTimerLabel.text = String(count)
        // 如果需要停止定时器,还能在这里加判断,比如count >= 10时调用timer.invalidate()
    }
}

记得加上[weak self]避免循环引用,防止内存泄漏哦。

内容的提问来源于stack exchange,提问作者lulzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 10:32:31