我是RxSwift的新手,我不了解do(onNext:)
和subscribe(onNext:)
之间的区别。
我用谷歌搜索,但是没有找到好的资源来解释这种差异。
答案 0 :(得分:5)
在冷的可观察链的开头,有一个函数会生成事件,例如发起网络请求的功能。
除非订阅了Observable,否则将不调用该生成器函数(默认情况下,每次订阅Observable时将调用该生成器函数。)因此,如果添加{{1} }到您的可观察链中,将不会调用该函数,并且不会启动生成事件的操作。为此,您必须添加一个do(onNext:)
。
(实际内部结构比上面的描述要复杂一些,但对于此解释而言足够接近。)
答案 1 :(得分:0)
执行操作符允许您插入副作用;也就是说,处理程序要做的事情不会以任何方式改变发出的事件。 做只会将事件传递给链中的下一个操作员。
使用do运算符的方法在这里。
您可以为任何或所有这些事件提供处理程序。
比方说,我们有一个从不发出任何东西的可观察物。即使它什么也不发出,它仍然是可观察的,我们可以订阅它。订阅后, do 运算符允许我们执行某事。 因此,下面的示例将在对该观察对象进行订阅时显示“已订阅”。
如果需要,可以随意包含其他任何处理程序;它们就像订阅的处理程序一样工作
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)