类型 'inout UIButton' 不符合协议 'ReactiveCompatible'

Type 'inout UIButton' does not conform to protocol 'ReactiveCompatible'

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

密码修改完成后登录

但出现错误: 类型 'inout UIButton' 不符合协议 'ReactiveCompatible'

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

extension NSObject: ReactiveCompatible { }

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

例如,我在尝试像这样合并两个流时遇到 collectionView 的错误

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

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

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

(注意看起来像 static Observable.merge 是在 RxSwift 3.4 中添加的)


你的情况

您正在尝试将流从 inputTextField.rx.controlEvent(.editingDidEnd)Observable<Void>)绑定到 loginButton.rx.tapObservable,而不是 观察者。在英语中,button.rx.tap 是被观察的意思,而不是被观察的意思。

您也可以这样做

inputTextField.rx.controlEvent(.editingDidEnd)
    .subscribe(onNext: { [unowned self] in
        self.inputTextField.userInteractionEnabled = false
        self.doLogin()
    }

您还可以合并来自按钮和文本字段的流,如上所述:)