我使用Timer类每x秒执行一些代码。当此代码中发生某些事情时,我想使计时器无效,从而停止“循环”。
我通过以下方式设法做到了这一点:
let timer = Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block: { timer in
//when something happens
timer.invalidate()
})
但是,我不会在我的代码中的任何其他位置使用此计时器,因此Xcode向我发出警告:
永远不会使用不可变值'timer'的初始化;考虑将作业替换为“_”或将其删除
显然,这并不能阻止我的应用程序运行,但我想摆脱警告。
我知道只是使用:
Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block: { timer in
//do stuff
})
仍然有效,但后来我不知道如何使计时器无效。只是在闭包内部调用invalidate()
不起作用(我知道,但我还是试过了。)
通常在SO上查看Timer
问题时,人们正在使用全局计时器变量,这使得它很容易失效。但是,我不想这样做,因为它没有必要,因为再次,我没有使用计时器对象。
我环顾四周,认为这是一个相当普遍的问题,但我找不到任何有用的东西。任何人都可以解释如何在不设置变量的情况下有效地使计时器失效吗?
答案 0 :(得分:5)
您仍然需要拨打timer.invalidate()
,但此处timer
引用Timer
的阻止。
Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block:
{
timer in //This is object that you need to use
//do stuff
//when something happens
timer.invalidate()
})