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

Swift中取消可选类型Timer的正确语法是什么?

解决Swift Timer停止时的"Expression Resolves to an Unused Function"错误

嘿,这个问题我之前也踩过坑!你出错的核心原因很简单:invalidate是Timer的实例方法,在Swift里调用方法必须加上括号(哪怕方法没有参数),你漏写了括号,编译器就认为你只是引用了这个方法但没真正调用它,所以抛出了这个错误。

正确的停止Timer代码

// 初始化方式
var waitingForResponseTimer : Timer?

// 停止代码
if let timer = waitingForResponseTimer {
    timer.invalidate() // 关键:给invalidate加上括号!
    waitingForResponseTimer = nil // 强烈建议置为nil,避免悬空引用
}

额外的小提示

  • 调用invalidate()之后,一定要把Timer变量设为nil。因为Timer被 invalidate后会从RunLoop中移除,但如果你的变量还持有它的引用,很可能会导致内存泄漏或者一些意想不到的问题。
  • 如果你想写得更简洁,也可以用可选链的写法:
waitingForResponseTimer?.invalidate()
waitingForResponseTimer = nil

这种写法会自动判断waitingForResponseTimer是否为nil,只有不为nil时才会执行invalidate(),之后直接置空,代码更清爽。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:31:40