import Combine import MPAKX extension BusUI { public final class ManyValue<T>: ObservableObject { let key: String @Published public var id: String? @Published public var v: T var sub = [AnyCancellable]() var subscriptions = [AnyCancellable]() public init( _ key: String, _ defaultValue: T ) { self.key = key v = defaultValue $id .sink { [weak self] id in self?.setup(id) } .store(in: &sub) } private func setup(_ id: String?) { subscriptions = [] Bus.receiveSync( [key], { [weak self] (_, m: MPAK.Many<T>) in guard let id, m.keys.contains(id), let v = m.dict[id] else { return } self?.v = v }, &subscriptions ) } } }