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
相关产品推荐
相关产品推荐

