withLatestFrom

将两个 Observables 最新的元素通过一个函数组合起来,当第一个 Observable 发出一个元素,就将组合后的元素发送出来

withLatestFrom - 图1

withLatestFrom 操作符将两个 Observables 中最新的元素通过一个函数组合起来,然后将这个组合的结果发出来。当第一个 Observable 发出一个元素时,就立即取出第二个 Observable 中最新的元素,通过一个组合函数将两个最新的元素合并后发送出去。


演示

当第一个 Observable 发出一个元素时,就立即取出第二个 Observable 中最新的元素,然后把第二个 Observable 中最新的元素发送出去。

  1. let disposeBag = DisposeBag()
  2. let firstSubject = PublishSubject<String>()
  3. let secondSubject = PublishSubject<String>()
  4. firstSubject
  5. .withLatestFrom(secondSubject)
  6. .subscribe(onNext: { print($0) })
  7. .disposed(by: disposeBag)
  8. firstSubject.onNext("?️")
  9. firstSubject.onNext("?️")
  10. secondSubject.onNext("1")
  11. secondSubject.onNext("2")
  12. firstSubject.onNext("?")

输出结果:

  1. 2

当第一个 Observable 发出一个元素时,就立即取出第二个 Observable 中最新的元素,将第一个 Observable 中最新的元素 first 和第二个 Observable 中最新的元素second组合,然后把组合结果 first+second发送出去。

  1. let disposeBag = DisposeBag()
  2. let firstSubject = PublishSubject<String>()
  3. let secondSubject = PublishSubject<String>()
  4. firstSubject
  5. .withLatestFrom(secondSubject) {
  6. (first, second) in
  7. return first + second
  8. }
  9. .subscribe(onNext: { print($0) })
  10. .disposed(by: disposeBag)
  11. firstSubject.onNext("?️")
  12. firstSubject.onNext("?️")
  13. secondSubject.onNext("1")
  14. secondSubject.onNext("2")
  15. firstSubject.onNext("?")

输出结果:

  1. ?2