ios - 类型 'inout UIButton' 不符合协议(protocol) 'ReactiveCompatible'

标签 ios swift rx-swift

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

密码修改完成后登录

但出现错误: 输入“inout UIButton”不符合协议(protocol)“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()

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


在你的情况下

您正在尝试绑定(bind)来自 inputTextField.rx.controlEvent(.editingDidEnd) 的流这是Observable<Void>loginButton.rx.tap这是一个Observable,而不是一个Observer。英语,button.rx.tap是用来观察的,而不是用来观察的。

你也可以这样做

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

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

关于ios - 类型 'inout UIButton' 不符合协议(protocol) 'ReactiveCompatible',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42871040/

相关文章:

swift - 在 Swift 中使用闭包从函数中检索字符串值

ios - RxSwift 触发可观察执行

ios - RxSwift 回调在结果之前先返回

jquery - HTML音频在iOS或iOS模拟器上被静音

ios - 从 Firebase 打印所有子列 - iOS Swift 4

swift - Swift init() 上的 MKLocalSearch 不起作用

swift - RxSwift 观察模型的变化并发出请求

ios - 从命令行使用 ADT 编译 AIR iOS .ipa

ios - 阴阳初始化 - 在调用 init 之前等待碎片

ios - Swift 2.1 - 如何将 collectionView 单元格的索引路径行传递给 segue