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



我使用RxSwift绑定我的viewmodelUILabelUITexfieldUITextfield的转换为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>".

有人知道为什么和如何使这个工作吗?谢谢。

UILabelrx.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。

最新更新