concat

让两个或多个 Observables 按顺序串连起来

concat - 图1

concat 操作符将多个 Observables 按顺序串联起来,当前一个 Observable 元素发送完毕后,后一个 Observable 才可以开始发出元素。

concat 将等待前一个 Observable 产生完成事件后,才对后一个 Observable 进行订阅。如果后一个是“热” Observable ,在它前一个 Observable 产生完成事件前,所产生的元素将不会被发送出来。

startWith 和它十分相似。但是startWith不是在后面添加元素,而是在前面插入元素。

merge 和它也是十分相似。merge并不是将多个 Observables 按顺序串联起来,而是将他们合并到一起,不需要 Observables 按先后顺序发出元素。


演示

  1. let disposeBag = DisposeBag()
  2. let subject1 = BehaviorSubject(value: "?")
  3. let subject2 = BehaviorSubject(value: "?")
  4. let variable = Variable(subject1)
  5. variable.asObservable()
  6. .concat()
  7. .subscribe { print($0) }
  8. .disposed(by: disposeBag)
  9. subject1.onNext("?")
  10. subject1.onNext("?")
  11. variable.value = subject2
  12. subject2.onNext("I would be ignored")
  13. subject2.onNext("?")
  14. subject1.onCompleted()
  15. subject2.onNext("?")

输出结果:

  1. next(?)
  2. next(?)
  3. next(?)
  4. next(?)
  5. next(?)