首页 文章

RxSwift:处理(由:)古怪

提问于
浏览
0

所以下面的代码用errror编译

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

类型'()'的值不符合行上的指定类型'Disposable' . 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) .

我错过了什么,这两种方法不相同吗?

1 回答

  • 4

    不,他们不等同 .

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

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

    由于 disposed(by:) 不返回任何内容,因此会出错 . 但是,在第二种情况下,您实际上为变量 doneSubscription 分配了一个 Disposable - subscribe 的返回值 .

    要修复第一种情况,只需删除变量声明即可 .

相关问题