swift - Rx swift : disposed(by:) weirdness

标签 swift rx-swift

所以下面的代码编译错误

var doneSubscription: Disposable = item.doneSubjectObservable
        .debug("doneSubscriptions")
        .subscribe(
            onNext: {
                done in self.validateDone(done: done, item: item)
        }).disposed(by: disposeBag)

Value of type '()' does not conform to specified type 'Disposable' on the line .disposed(by: disposeBag)

但我可以毫无错误地做到这一点:

var doneSubscription: Disposable = item.doneSubjectObservable
        .debug("doneSubscriptions")
        .subscribe(
            onNext: {
                done in self.validateDone(done: done, item: item)
        })

    doneSubscription.disposed(by: disposeBag)

我所做的只是将 .disposed(by: disposeBag) 移出订阅链。

我是不是漏掉了什么,这两种方法不是等价的吗?

最佳答案

不,它们不等价。

在第一种情况下,您将整个表达式的返回值存储到 doneSubscription 中,这是一个 Disposable 类型的变量:

item.doneSubjectObservable
    .debug("doneSubscriptions")
    .subscribe(
        onNext: {
            done in self.validateDone(done: done, item: item)
    }).disposed(by: disposeBag)

因为 disposed(by:) 没有返回任何东西,所以这会给你一个错误。 然而,在第二种情况下,您实际上将 Disposable 分配给变量 doneSubscription - subscribe 的返回值。

要修复您的第一个案例,只需删除变量声明即可。

关于swift - Rx swift : disposed(by:) weirdness,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47896868/

相关文章:

Swift 字符串 vs. 字符串!与字符串?

swift - 使用研究套件无法跳过任何步骤

swift - 连接到主视图显示时,Xcode 导航栏项目消失

swift - 我第二次调用该函数时未触发 RxAlamofire 请求

swift - 如何在 BehaviorRelay 中编辑当前值的属性?

ios - 在消息贴纸应用程序中工作时获取 "Unbalanced calls to begin/end appearance transitions for..."

ios - 无法获取以编程方式打开 uipageviewcontroller 页面的按钮(使用页面扩展)

ios - 观察者在处理单元格 RxSwift 后仍然接收事件

rx-swift - RxSwift subscribeOn 和observeOn 不在预期的后台线程上

swift - 如何从无限序列中获取 `Single<T>`?