⏰Timer
⭐️ 注意:Timer 屬於 Foundation 的類別
.onReceive() accepts a publisher as its first parameter and a function to run as its second.
.onChange() is called on the main thread. Avoid performing long-running tasks on the main thread. If you need to perform a long-running task in response to value changing, you should dispatch to a background queue.
Because Timer.TimerPublisher conforms to the ConnectablePublisher protocol, it won’t produce elements until you explicitly connect to it. Do this by either calling connect(), or using an autoconnect() operator to connect automatically when a subscriber attaches.
- Ray ⟩ Combine: Asynchronous Programming with Swift, Ch. 11: Timers 
- Foundation ⟩ Task Management ⟩ Timer (class) - Timer.TimerPublisher (class) - .autoconnect() -> Publishers.Autoconnect - <Timer.TimerPublisher>
 
 
- Combine ⟩ ConnectablePublisher (protocol) ⟩ - .connect() ⭐️ - connects to the publisher, allowing it to produce elements, and returns an instance with which to cancel publishing. 
 
- SwiftUI ⟩ - Scenes ⟩ ScenePhase (enum) 
- State ⟩ EnvironmentValues (struct) ⟩ .scenePhase (instance property) 
- View ⟩ Input and Event Modifiers ⟩ - .onReceive(_:perform:) - perform action when emitted data detected. 
- .onChange(of:perform:) - perform action when specific value changes. 
 
 
- extended in Combine framework. 
- use @Environment values. 
- use Timer.TimerPublisher ( - ConnectablePublisher) Publisher.
- use time to do animations. 
問:「 What does .autoconnect() do❓ .onReceive(timer) connects the timer to a view automatically❓」
答:「 .autoconnect() automatically connects when the first subscriber subscribes, .onReceive(timer) subscribes to the timer publisher. 」
問:「 What is a RunLoop❓ 」
Last updated
Was this helpful?