withLatestFrom
WithLatestFrom.swift:
Merges two observable sequences into one observable sequence by combining each element from self with the latest element from the second source, if any.
withLatestFrom
将两个可观察序列合并为一个可观察序列,当第二个源有新数据的时候,再发送第一个源,会将第二个源的新数据订阅到。比较绕。
let pb1 = PublishSubject<Int>()
let pb2 = PublishSubject<Int>()
pb1.withLatestFrom(pb2)
.subscribe { event in
switch event {
case .next(let element):
print("element:", element)
case .error(let error):
print("error:", error)
case .completed:
print("completed")
}}
.disposed(by: bag)
pb2.onNext(2)
pb1.onNext(1)
输出:
element: 2
说白了就是pb1
是依赖于pb2
的,当pb2
有新值的时候再发送pb1
就能得到pb2
发送出来的值了,且只能得到pb2
。
withLatestFrom
另一个是可以加上一个返回值,来得到他们的组合
pb1.withLatestFrom(pb2, resultSelector: { (i1, i2) -> Int in
return i1 + i2
}).subscribe { event in
switch event {
case .next(let element):
print("element:", element)
case .error(let error):
print("error:", error)
case .completed:
print("completed")
}}
.disposed(by: bag)
pb1.onNext(1)
pb2.onNext(2)
pb1.onNext(3)
pb1.onCompleted()
输出:
element: 5
completed
pb2
发出了2,pb1
最后发出了3,2+3=5。