RxSwift使用bindTo绑定变量<string>到UILabel不适用于Swift 3.0更新

时间:2016-09-22 09:29:57

标签: ios swift swift3

我使用RxSwiftviewmodel绑定到UILabelUITexfield。转化为UITextfield的{​​{1}}个问题,只需用Swift 3替换rx_text即可。

但不适用于rx.text。在UILabel,我使用了:

Swift 2.2

对于self.viewModel.shiftNameText.asObservable().bindTo(self.shiftLabel.rx_text).addDisposableTo(self.disposeBag) ,我正在使用Swift 3 3.0.0-beta.1并尝试将rx_text更改为 rx.text ,但它不会编译和显示此错误“无法转换类型为RxSwift

的值

有谁知道为什么以及如何使这项工作?感谢。

1 个答案:

答案 0 :(得分:31)

UILabel&#39; 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