timer
在 Swift 裡,常見的 Timer(以前叫 NSTimer)可以用來做周期性或一次性的定時任務。下面我幫你整理幾種常見寫法 👇
1. 基本用法(重複執行)
import Foundation
// 建立一個 Timer,每 1 秒執行一次
var timer: Timer?
func startTimer() {
// 先確保舊的 Timer 停掉
timer?.invalidate()
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { _ in
print("Timer fired at \(Date())")
}
}
這裡 repeats: true 代表會持續觸發。
記得要保留 timer 這個變數,否則 Timer 會被釋放,不會觸發。
2. 停止 Timer
func stopTimer() {
timer?.invalidate()
timer = nil
}
3. 一次性 Timer
Timer.scheduledTimer(withTimeInterval: 3.0, repeats: false) { _ in
print("3 秒後只觸發一次")
}
4. 在 SwiftUI 裡用 Timer
如果你是在 SwiftUI,可以直接用 Timer.publish 來綁定 UI:
import SwiftUI
import Combine
struct ContentView: View {
// 每 1 秒更新一次
let timer = Timer.publish(every: 1.0, on: .main, in: .common).autoconnect()
@State private var counter = 0
var body: some View {
Text("Counter: \(counter)")
.onReceive(timer) { _ in
counter += 1
}
}
}
5. 注意事項
Timer會依賴當前的 RunLoop,所以要在主執行緒(UI 更新)或背景 RunLoop 執行時才會生效。- 在 iOS 的 SwiftUI / UIKit 開發中,通常會用
DispatchSourceTimer或async/await也能達到同樣效果。