ValueScheduling
public enum ValueScheduling
ValueScheduling controls how ValueObservation schedules the notifications of fresh values to your application.
-
All values are notified on the main queue.
If the observation starts on the main queue, an initial value is notified right upon subscription, synchronously:
// On main queue let observation = Player.observationForAll() let observer = try observation.start(in: dbQueue) { players: [Player] in print("fresh players: \(players)") } // <- here "fresh players" is already printed.If the observation does not start on the main queue, an initial value is also notified on the main queue, but asynchronously:
// Not on the main queue: "fresh players" is eventually printed // on the main queue. let observation = Player.observationForAll() let observer = try observation.start(in: dbQueue) { players: [Player] in print("fresh players: \(players)") }When the database changes, fresh values are asynchronously notified on the main queue:
// Eventually prints "fresh players" on the main queue try dbQueue.write { db in try Player(...).insert(db) }Declaration
Swift
case mainQueue -
All values are asychronously notified on the specified queue.
An initial value is fetched and notified if
startImmediatelyis true.Declaration
Swift
case async(onQueue: DispatchQueue, startImmediately: Bool) -
Values are not all notified on the same dispatch queue.
If
startImmediatelyis true, an initial value is notified right upon subscription, synchronously, on the dispatch queue which starts the observation.// On any queue var observation = Player.observationForAll() observation.scheduling = .unsafe(startImmediately: true) let observer = try observation.start(in: dbQueue) { players: [Player] in print("fresh players: \(players)") } // <- here "fresh players" is already printed.When the database changes, other values are notified on unspecified queues.
Declaration
Swift
case unsafe(startImmediately: Bool)
View on GitHub
Install in Dash
ValueScheduling Enumeration Reference