所以下面的代码编译错误
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/