如何在不设置变量的情况下使计时器无效

Ben*_*wry 0 timer nstimer swift

我使用Timer类每x秒执行一些代码.当此代码中发生某些事情时,我想使计时器无效,从而停止"循环".

我通过执行以下操作设法完成此操作:

let timer = Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block: { timer in

    //when something happens
    timer.invalidate()

})
Run Code Online (Sandbox Code Playgroud)

但是,我不在我的代码中的任何其他位置使用此计时器,因此Xcode向我发出警告:

永远不会使用不可变值'timer'的初始化; 考虑将赋值替换为'_'或删除它

显然,这并不能阻止我的应用程序运行,但我想摆脱警告.

我知道只是使用:

Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block: { timer in
    //do stuff
})
Run Code Online (Sandbox Code Playgroud)

仍然会工作,但后来我不知道如何使计时器无效.只是invalidate()在封闭内部调用不起作用(我知道,但我还是试了很久).

通常,当Timer在SO上查看问题时,人们正在使用全局计时器变量,这使得它很容易失效.但是,我不想这样做,因为它没有必要,因为再次,我没有使用计时器对象一旦完成.

我环顾四周,认为这是一个相当普遍的问题,但我找不到任何有用的东西.谁能说明如何在不设置变量的情况下有效地使计时器失效?

Nir*_*v D 6

你需要仍然调用,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()
})
Run Code Online (Sandbox Code Playgroud)