Как я могу привязать значение 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)" }