Swift 运行第一次没有定时器的Timer块
Swift Run the block of Timer without timer in first time
我创建了一个计时器并将其设置为每 30 秒重复一次
计时器第一次等待 30 秒到 运行,然后第二次再等待 30 秒,我想让它第一次到 运行 没有 30 秒,有什么办法吗?
Timer.scheduledTimer(withTimeInterval: 30, repeats: true) { timer in
if iteration >= 0 {
runCommands()
iteration -= 1
if iteration == 0 { exit(0) }
}
}
只需调用fire
。顾名思义。
Timer.scheduledTimer(withTimeInterval: 30, repeats: true) { timer in
if iteration >= 0 {
runCommands()
iteration -= 1
if iteration == 0 {exit(0)}
}
}.fire()
问题是您没有参考您的计时器。做一个!
let timer = Timer.scheduledTimer...
现在在下一行你可以说 timer.fire()
。这会导致计时器立即执行其块。
要么将从计时器闭包中调用的代码重构为函数,要么将闭包放入变量中。然后显式调用 function/closure:
typealias TimerClosure = (_: Timer?) -> Void
let timerClosure: TimerClosure = { [weak self] timer in
guard let self = self else { return }
if self.iteration >= 0 {
self.runCommands()
self.iteration -= 1
if self.iteration == 0 {exit(0)}
}
}
Timer.scheduledTimer(withTimeInterval: 30, repeats: true, block: timerClosure )
timerClosure(nil)
}
编辑:
上述方法可行,但正如其他人指出的那样,您也可以手动调用计时器上的 fire()
。
我将保留上述部分的答案,因为它展示了如何设置一个包含闭包的局部变量,然后将其传递给一个函数并直接调用它,但这并不是真正需要的。相反,只需这样做:
let timer = Timer.scheduledTimer(withTimeInterval: 30, repeats: true) { [weak self] timer in
guard let self = self else { return }
if self.iteration >= 0 {
self.runCommands()
self.iteration -= 1
if self.iteration == 0 { exit(0) }
}
}
timer.fire()
我创建了一个计时器并将其设置为每 30 秒重复一次 计时器第一次等待 30 秒到 运行,然后第二次再等待 30 秒,我想让它第一次到 运行 没有 30 秒,有什么办法吗?
Timer.scheduledTimer(withTimeInterval: 30, repeats: true) { timer in
if iteration >= 0 {
runCommands()
iteration -= 1
if iteration == 0 { exit(0) }
}
}
只需调用fire
。顾名思义。
Timer.scheduledTimer(withTimeInterval: 30, repeats: true) { timer in
if iteration >= 0 {
runCommands()
iteration -= 1
if iteration == 0 {exit(0)}
}
}.fire()
问题是您没有参考您的计时器。做一个!
let timer = Timer.scheduledTimer...
现在在下一行你可以说 timer.fire()
。这会导致计时器立即执行其块。
要么将从计时器闭包中调用的代码重构为函数,要么将闭包放入变量中。然后显式调用 function/closure:
typealias TimerClosure = (_: Timer?) -> Void
let timerClosure: TimerClosure = { [weak self] timer in
guard let self = self else { return }
if self.iteration >= 0 {
self.runCommands()
self.iteration -= 1
if self.iteration == 0 {exit(0)}
}
}
Timer.scheduledTimer(withTimeInterval: 30, repeats: true, block: timerClosure )
timerClosure(nil)
}
编辑:
上述方法可行,但正如其他人指出的那样,您也可以手动调用计时器上的 fire()
。
我将保留上述部分的答案,因为它展示了如何设置一个包含闭包的局部变量,然后将其传递给一个函数并直接调用它,但这并不是真正需要的。相反,只需这样做:
let timer = Timer.scheduledTimer(withTimeInterval: 30, repeats: true) { [weak self] timer in
guard let self = self else { return }
if self.iteration >= 0 {
self.runCommands()
self.iteration -= 1
if self.iteration == 0 { exit(0) }
}
}
timer.fire()