文件
check-ios-bus/Modules/BusX/BusUI/src/BusUI.ManyValue.swift
Михаил Капелько 567d322516 d
2024-01-08 18:06:52 +03:00

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