https://www.youtube.com/watch?v=Xi_uBYKigAA
Timer Not Working in SwiftUI Error – Fixed
by Alexandra Kropova from Mammoth Interactive
Did you build a timer with no error messages, but for some reason the timer refuses to count down? Read the solution in this post.
Want to learn more? Enroll in Complete Web & App Development with Machine Learning For All (125 Hours). Free in the Mammoth Unlimited Membership. Get 250+ courses and 2,000 hours at a dirt-cheap price.
An example where the problem occurs:
struct ContentView: View {
let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
@State var timerAmount = 10
var body: some View {
Text(timerAmount )
.onReceive(timer) { _ in
timerAmount -= 1
}
}
}
Solution
To make the timer update, the solution is to put the Text element (or whichever element is dependent on the timer) into a Stack, such as a VStack, HStack or ZStack element. Use use the following Swift 5.5 code:
struct ContentView: View {
let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
@State var timerAmount = 10
var body: some View {
VStack {
Text(timerAmount )
.onReceive(timer) { _ in
timerAmount -= 1
}
}
}
}
Toolkit:
- Xcode 13
- Swift 5.5
- SwiftUI 3
- iOS 15
Suggest more solutions or ask a question in the comments below.
Want to learn more? Enroll in Complete Web & App Development with Machine Learning For All (125 Hours). Free in the Mammoth Unlimited Membership. Get 250+ courses and 2,000 hours at a dirt-cheap price.