Menu

Timer

Skip support for Swift Timer.

The following example screens and source code is from SkipUI’s Showcase sample app TimerPlayground.swift

import SwiftUI

struct TimerPlayground: View {
    @State var count = 0

    var body: some View {
        VStack(spacing: 16) {
            TimerPlaygroundTimerView(message: "Tap count: \(count)")
            Button("Tap to recompose in 1 sec") {
                DispatchQueue.main.asyncAfter(wallDeadline: .now() + 1.0) {
                    count += 1
                }
            }
        }
        .padding()
        .toolbar {
            PlaygroundSourceLink(file: "TimerPlayground.swift")
        }
    }
}

private struct TimerPlaygroundTimerView: View {
    let message: String
    let timer = Timer.publish(every: 1.0, on: .main, in: .default).autoconnect()
    @State var timerDate: Date?

    var body: some View {
        VStack {
            Text(message)
            Text("Timer date: \(timerDate == nil ? "nil" : timerDate!.description)")
        }
        .font(.largeTitle)
        .onReceive(timer) { date in
            timerDate = date
        }
    }
}