所以下面的代码编译时出现错误
var doneSubscription: Disposable = item.doneSubjectObservable
.debug("doneSubscriptions")
.subscribe(
onNext: {
done in self.validateDone(done: done, item: item)
}).disposed(by: disposeBag)
Run Code Online (Sandbox Code Playgroud)
类型“()”的值不符合 .dispose(by: disposeBag) 行上指定的类型“Disposable”
但我可以毫无错误地做到这一点:
var doneSubscription: Disposable = item.doneSubjectObservable
.debug("doneSubscriptions")
.subscribe(
onNext: {
done in self.validateDone(done: done, item: item)
})
doneSubscription.disposed(by: disposeBag)
Run Code Online (Sandbox Code Playgroud)
我所做的只是.disposed(by: disposeBag)从订阅链中移出。
我错过了什么吗,这两种方法不是等价的吗?
不,它们并不等同。
在第一种情况下,您将整个表达式的返回值存储到doneSubscription类型为 的变量中Disposable:
item.doneSubjectObservable
.debug("doneSubscriptions")
.subscribe(
onNext: {
done in self.validateDone(done: done, item: item)
}).disposed(by: disposeBag)
Run Code Online (Sandbox Code Playgroud)
由于disposed(by:)不返回任何内容,因此会出现错误。然而,在第二种情况下,您实际上将 a 分配Disposable给了变量doneSubscription- 的返回值subscribe。
要解决第一种情况,只需删除变量声明即可。
| 归档时间: |
|
| 查看次数: |
459 次 |
| 最近记录: |