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

How to invalidate timer without setting variable

我正在使用计时器 class 每 x 秒执行一次特定代码。当此代码中发生某些事情时,我想使计时器无效,从而停止 "loop"。

我通过执行以下操作成功做到了这一点:

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

    //when something happens
    timer.invalidate()

})

但是,我没有在我的代码中的任何其他地方使用这个计时器,所以 Xcode 给我警告:

Initialization of immutable value 'timer' was never used; consider replacing with assignment to '_' or removing it

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

我知道只是使用:

Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block: { timer in
    //do stuff
})

仍然可以工作,但我不知道如何使计时器无效。仅在闭包内调用 invalidate() 是行不通的(我知道这是不可能的,但我还是试过了)。

通常在查看 Timer 问题时,人们使用的是全局计时器变量,这使得它很容易失效。但是,我不想这样做,因为这不是必需的,因为,一旦它完成,我就不再使用计时器对象。

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

您仍需要调用 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()
})