我是RxSwift的新手,我不了解do(onNext:)和之间的区别subscribe(onNext:)。
我用谷歌搜索,但是找不到很好的资源来解释这种差异。
Dan*_* T. 10
在冷的可观察链的开始处,有一个函数会生成事件,例如,引发网络请求的函数。
除非预订了Observable,否则将不会调用该生成器函数(默认情况下,每次预订Observable时都会调用该生成器函数。)因此,如果将a添加do(onNext:)到您的Observable 链中,则该函数将不会被调用并且该动作生成事件的事件将不会启动。您必须为此添加一个subscribe(onNext:)。
(实际内部结构比上面的描述要复杂一些,但对于此解释来说足够接近。)
小智 6
该DO运营商允许你插入的副作用; 也就是说,处理程序做的事情不会以任何方式改变发出的事件。do只会将事件传递给链中的下一个操作符。
使用 do 运算符的方法在这里。
您可以为任何或所有这些事件提供处理程序。
假设我们有一个从不发出任何东西的 observable。即使它什么都不发出,它仍然是一个可观察的,我们可以订阅它。do操作符允许我们在订阅时做一些事情。因此,当对该 observable 进行订阅时,下面的示例将打印“已订阅”。
如果您愿意,请随意包含任何其他处理程序;它们就像 subscribe 的处理程序一样工作
let observable = Observable<Any>.never()
let disposeBag = DisposeBag()
observable
.do(onSubscribe: {
print("Subscribed")
})
.subscribe(
onNext: { element in
print(element)
},
onCompleted: {
print("Completed")
},
onDisposed: {
print("Disposed")
}
)
.disposed(by: disposeBag)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1491 次 |
| 最近记录: |