Проверка шаблона шины для iOS

44 行
853B

  1. import Combine
  2. import MPAKX
  3. extension BusUI {
  4. public final class ManyValue<T>: ObservableObject {
  5. let key: String
  6. @Published public var id: String?
  7. @Published public var v: T
  8. var sub = [AnyCancellable]()
  9. var subscriptions = [AnyCancellable]()
  10. public init(
  11. _ key: String,
  12. _ defaultValue: T
  13. ) {
  14. self.key = key
  15. v = defaultValue
  16. $id
  17. .sink { [weak self] id in self?.setup(id) }
  18. .store(in: &sub)
  19. }
  20. private func setup(_ id: String?) {
  21. subscriptions = []
  22. Bus.receiveSync(
  23. [key],
  24. { [weak self] (_, m: MPAK.Many<T>) in
  25. guard
  26. let id,
  27. m.keys.contains(id),
  28. let v = m.dict[id]
  29. else {
  30. return
  31. }
  32. self?.v = v
  33. },
  34. &subscriptions
  35. )
  36. }
  37. }
  38. }