SharedValueObservation
A shared value observation spares database resources by sharing a single underlying ValueObservation
subscription.
final class SharedValueObservation<Element> where Element : Sendable
You build a SharedValueObservation
with the ValueObservation
method shared(in:scheduling:extent:)
. For example:
let observation = ValueObservation.tracking { db in
try Player.fetchAll(db)
}
let sharedObservation = observation.shared(in: dbQueue)
let cancellable = try sharedObservation.start { error in
// handle error
} onChange: { (players: [Player]) in
print("Fresh players: \(players)")
}
The underlying subscription is shared if and only if you start observing the database from the same SharedValueObservation
instance:
// Shared
let sharedObservation = ValueObservation.tracking { db in ... }.shared(in: dbQueue)
let cancellable1 = sharedObservation.start(...)
let cancellable2 = sharedObservation.start(...)
// NOT shared
let cancellable1 = ValueObservation.tracking { db in ... }.shared(in: dbQueue).start(...)
let cancellable2 = ValueObservation.tracking { db in ... }.shared(in: dbQueue).start(...)