|
- 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
- )
- }
- }
- }
|