zip

通过一个函数将多个 Observables 的元素组合起来,然后将每一个组合的结果发出来

zip - 图1

zip 操作符将多个(最多不超过8个) Observables 的元素通过一个函数组合起来,然后将这个组合的结果发出来。它会严格的按照序列的索引数进行组合。例如,返回的 Observable 的第一个元素,是由每一个源 Observables 的第一个元素组合出来的。它的第二个元素 ,是由每一个源 Observables 的第二个元素组合出来的。它的第三个元素 ,是由每一个源 Observables 的第三个元素组合出来的,以此类推。它的元素数量等于源 Observables 中元素数量最少的那个。


演示

  1. let disposeBag = DisposeBag()
  2. let first = PublishSubject<String>()
  3. let second = PublishSubject<String>()
  4. Observable.zip(first, second) { $0 + $1 }
  5. .subscribe(onNext: { print($0) })
  6. .disposed(by: disposeBag)
  7. first.onNext("1")
  8. second.onNext("A")
  9. first.onNext("2")
  10. second.onNext("B")
  11. second.onNext("C")
  12. second.onNext("D")
  13. first.onNext("3")
  14. first.onNext("4")

输出结果:

  1. 1A
  2. 2B
  3. 3C
  4. 4D