do(onNext :)和subscribe(onNext :)有什么区别?

时间:2018-12-31 10:55:14

标签: rx-swift

我是RxSwift的新手,我不了解do(onNext:)subscribe(onNext:)之间的区别。

我用谷歌搜索,但是没有找到好的资源来解释这种差异。

2 个答案:

答案 0 :(得分:5)

在冷的可观察链的开头,有一个函数会生成事件,例如发起网络请求的功能。

除非订阅了Observable,否则将不调用该生成器函数(默认情况下,每次订阅Observable时将调用该生成器函数。)因此,如果添加{{1} }到您的可观察链中,将不会调用该函数,并且不会启动生成事件的操作。为此,您必须添加一个do(onNext:)

(实际内部结构比上面的描述要复杂一些,但对于此解释而言足够接近。)

答案 1 :(得分:0)

执行操作符允许您插入副作用;也就是说,处理程序要做的事情不会以任何方式改变发出的事件。 只会将事件传递给链中的下一个操作员。

使用do运算符的方法在这里。

enter image description here

您可以为任何或所有这些事件提供处理程序。

比方说,我们有一个从不发出任何东西的可观察物。即使它什么也不发出,它仍然是可观察的,我们可以订阅它。订阅后, 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)