44 行
853 B
Swift
44 行
853 B
Swift
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
|
|
)
|
|
}
|
|
}
|
|
}
|