我創建了一個計時器并將其設定為每30秒重復定時器等待30秒才能運行第一次,然后第二秒鐘再次運行,我希望它在沒有30秒的情況下第一次運行?
Timer.scheduledTimer(withTimeInterval: 30, repeats: true) { timer in
if iteration >= 0 {
runCommands()
iteration -= 1
if iteration == 0 { exit(0) }
}
}
uj5u.com熱心網友回復:
只要打電話fire。它做了這個名字的意思。
Timer.scheduledTimer(withTimeInterval: 30, repeats: true) { timer in
if iteration >= 0 {
runCommands()
iteration -= 1
if iteration == 0 {exit(0)}
}
}.fire()
uj5u.com熱心網友回復:
問題是您對您的計時器沒有參考。做一個!
let timer = Timer.scheduledTimer...
現在在下一行中,你可以說timer.fire()。這導致定時器立即執行其塊。
uj5u.com熱心網友回復:
要么重新推薦從計時器關閉所呼叫的代碼為函式,或將閉包放入變數中。然后顯式呼叫函式/關閉:
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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/440108.html
下一篇:SwiftUI強調色彩目標之間
