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

Swift 4调用Timer.invalidate()报“Expression resolves to an unused function”错误

解决Timer.invalidate()调用的错误问题

嘿,我一眼就瞅出问题在哪了——你把invalidate()的调用方式完全搞错啦!

错误原因

你写的Timer.invalidate(timerT)是把invalidate()当成了Timer的类方法来用,但实际上它是个实例方法。也就是说,你不能通过Timer这个类去调用它,必须通过你已经创建好的Timer实例(也就是你的timerT变量)来调用这个方法。编译器提示的“Expression resolves to an unused function”,本质就是它找不到你这么调用的正确方法,相当于你写了个没用的函数引用。

修正后的代码

把newGameAction里的错误调用改成下面这样:

@IBAction func newGameAction(_ sender: UIButton) {
    // 用可选链调用invalidate,避免timerT为nil时崩溃
    timerT?.invalidate()
    // 最好把timerT置为nil,因为失效的计时器无法复用
    timerT = nil
    
    game = SetGame()
    updateUIfromModel()
    startTimer()
}

额外说明

  • 使用timerT?.invalidate()而不是直接timerT.invalidate(),是因为第一次点击newGameAction的时候,timerT可能还没被初始化(还没调用过startTimer()),直接调用会导致崩溃,可选链能安全处理这种情况。
  • 调用invalidate()后把timerT设为nil是个好习惯,因为已经失效的Timer实例不能再被启动,下次调用startTimer()会创建一个新的Timer实例并赋值给timerT,这样能避免引用失效的实例导致的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:00:43