RxSwift:处理(由:)古怪

问题描述 投票:0回答:1

所以下面的代码会编译错误

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)移出订阅链。

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

swift rx-swift
1个回答
4
投票

不,他们不等同。

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

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

由于disposed(by:)没有返回任何内容,因此会给您一个错误。然而,在第二种情况下,您实际上将Disposable分配给变量doneSubscription - subscribe的返回值。

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

© www.soinside.com 2019 - 2024. All rights reserved.