Как я могу привязать значение label к переменной в viewModel

У меня есть viewModel, и в ней есть переменная. Хочу, чтобы когда у меня меня менялось значение переменной, автоматом менялся label в viewController. Как мне это сделать? Без использования RxSwift или Combine.


Ответы (1 шт):

Автор решения: Rivia

Решение:

class Dynamic<T> {
    typealias Listener = (T) -> ()
  private var listeners: [Listener] = []
  init(_ v: T) {
    value = v
  }
  var value: T {
    didSet {
      for l in listeners { l(value) } }
  }
  func bind(_ l: @escaping Listener) {
    listeners.append(l)
    l(value)
  }
  func addListener(_ l: @escaping Listener) {
    listeners.append(l)
  }
}
    
infix operator >>>
func >>> <T>(left: Dynamic<T>, right: @escaping (T) -> Void) {
  left.bind(right)
}

func >> <T>(left: Dynamic<T>, right: @escaping (T) -> Void) {
  return left.addListener(right)
}

viewDidLoad:

viewModel.playerPoints >>> { self.label.text = "\($0)" }
→ Ссылка