类型 '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.tap
(Observable) ,而不是 观察者。在英语中,button.rx.tap
是被观察的意思,而不是被观察的意思。
您也可以这样做
inputTextField.rx.controlEvent(.editingDidEnd)
.subscribe(onNext: { [unowned self] in
self.inputTextField.userInteractionEnabled = false
self.doLogin()
}
您还可以合并来自按钮和文本字段的流,如上所述:)
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.tap
(Observable) ,而不是 观察者。在英语中,button.rx.tap
是被观察的意思,而不是被观察的意思。
您也可以这样做
inputTextField.rx.controlEvent(.editingDidEnd)
.subscribe(onNext: { [unowned self] in
self.inputTextField.userInteractionEnabled = false
self.doLogin()
}
您还可以合并来自按钮和文本字段的流,如上所述:)