![](/img/trans.png)
[英]RxSwift: Error 'Type 'inout UITapGestureRecognizer' does not conform to protocol '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包含以下行 ,因此当您为任何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)
的流inputTextField.rx.controlEvent(.editingDidEnd)
Observable<Void>
inputTextField.rx.controlEvent(.editingDidEnd)
绑定到loginButton.rx.tap
,它是一个Observable ,而不是Observer 。 在英语中, button.rx.tap
是要观察的,而不是要观察。
你可以改为做这样的事情
inputTextField.rx.controlEvent(.editingDidEnd)
.subscribe(onNext: { [unowned self] in
self.inputTextField.userInteractionEnabled = false
self.doLogin()
}
您还可以合并按钮和textField中的流,如上所述:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.