RxSwift с помощью bindTo для привязки переменной к UILabel не работает для обновления Swift 3.0
я использую RxSwift
связывать свою viewmodel
to UILabel
и UITexfield
. UITextfield
у них нет проблем с преобразованием в Swift 3
, просто заменив rx_text
С rx.text
работали.
а не UILabel
. On Swift 2.2
, я:
self.viewModel.shiftNameText.asObservable().bindTo(self.shiftLabel.rx_text).addDisposableTo(self.disposeBag)
на Swift 3
, Я использую RxSwift
3.0.0-бета.1 и попытался просто изменить rx_text на rx.текст, но он не компилируется и показывает эту ошибку "невозможно преобразовать значение типа 'AnyObserver<String?>' (aka 'AnyObserver<Optional<String>>') to expected argument type 'Variable<String>".
кто-нибудь знает почему и как это сделать? Спасибо.
1 ответов
UILabel
' s rx.text
свойство типа AnyObserver<String?>
поэтому вам нужно сопоставить значение с необязательным
self.viewModel.shiftNameText
.asObservable()
.map { text -> String? in
return Optional(text)
}
.bind(to:self.shiftLabel.rx.text)
.disposed(by:self.disposeBag)
или короче:
self.viewModel.shiftNameText
.asObservable()
.map { }
.bind(to:self.shiftLabel.rx.text)
.disposed(by:self.disposeBag)
см.https://github.com/ReactiveX/RxSwift/issues/875 для других решений.