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 для других решений.