繁体   English   中英

类型'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包含以下行 ,因此当您为任何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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM