SharedValueObservation

A shared value observation spares database resources by sharing a single underlying ValueObservation subscription.

SharedValueObservation.swift:167
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(...)