Skip Fuse is now free for indie developers!
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
        }
    }
}