输入' inout UIButton'不符合协议' ReactiveCompatible'

时间:2017-03-18 05:55:52

标签: ios swift rx-swift

passWordInputView.inputTextField.rx.controlEvent(.editingDidEnd)
        .bindTo(loginButton.rx.tap)
        .disposed(by: disposeBag)

完成密码编辑后再登录

但得到错误: 输入' inout UIButton'不符合协议' ReactiveCompatible'

1 个答案:

答案 0 :(得分:6)

由于RxSwift包含the following line,因此当您为任何NSObject子类(UIKit中的任何内容)获取此错误时,您可以非常确定其他东西会给编译器带来麻烦。

extension NSObject: ReactiveCompatible { }

根据我的经验,当尝试错误地使用rx方法或运算符或者存在一些语法错误时会发生此错误。

例如,当我尝试合并两个像这样的

时,我收到了一个collectionView的错误
Observable.merge(collectionView.rx.streamOne, streamTwo)

但合并两个流的正确方法是

Observable.of(collectionView.rx.streamOne, streamTwo).merge()

(注意看起来像在RxSwift 3.4中添加了静态Observable.merge)

在您的情况下

您正在尝试将来自inputTextField.rx.controlEvent(.editingDidEnd)的{​​{1}}流绑定到Observable<Void>,这是一个 Observable ,而不是 观察员 。在英语中,loginButton.rx.tap意味着被观察到,而不是要观察。

你可以改为做这样的事情

button.rx.tap

您还可以合并按钮和textField中的流,如上所述:)