我使用RxSwift
绑定我的viewmodel
到UILabel
和UITexfield
。UITextfield
的转换为Swift 3
没有问题,只是用rx.text
代替rx_text
。
但不适合UILabel
。在Swift 2.2
上,我使用:
self.viewModel.shiftNameText.asObservable().bindTo(self.shiftLabel.rx_text).addDisposableTo(self.disposeBag)
对于Swift 3
,我使用RxSwift
3.0.0-beta。1,并尝试只是改变rx_text rx。text,但它不能编译并显示这个错误"Cannot convert value of type ' AnyObserver<String?>' (aka 'AnyObserver<Optional<String>>') to expected argument type 'Variable<String>".
有人知道为什么和如何使这个工作吗?谢谢。
UILabel
的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 { $0 }
.bind(to:self.shiftLabel.rx.text)
.disposed(by:self.disposeBag)
参见https://github.com/ReactiveX/RxSwift/issues/875。