Combine
-

Fix: Timer.TimerPublisher Won’t Restart After connect().cancel()
Timer.TimerPublisher keeps firing after you cancel the sink, and connect() won’t restart it. Fix the connection lifetime with AnyCancellable and autoconnect.
-

SwiftUI Timer: How to Repeat Without RunLoop Bugs
Replace Timer and RunLoop with TimelineView, Task.sleep, AsyncTimerSequence or Timer.publish — and stop timers that keep firing after a view disappears.