在一组冷的可观察物上使用CombineLatest时,我看到了一些意外的结果。它会发出除最后一个Observable之外的所有消息的最新消息,而是将第一个(n-1)个Observables的最新消息与第n个Observable的每个元素进行合并。
let observable = ReplaySubject<Int>.createUnbounded()
let observable2 = ReplaySubject<String>.createUnbounded()
observable.onNext(1)
observable.onNext(2)
observable.onNext(3)
observable.onNext(4)
observable2.onNext("bed")
observable2.onNext("book")
observable2.onNext("table")
let latestObserver = Observable.combineLatest(observable,observable2)
_ = latestObserver
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
产生输出: (4,“床”) (4,“书”) (4,“表格”)
我原本希望只看到(4,“表”)的输出。
如果我像这样改变可观察对象的顺序:
let latestObserver = Observable.combineLatest(observable2,observable)
我得到的输出: (“表格1) (“表格”,2) (“表3) (“表格”,4)
如果我添加一个最终的任意Observable,那么我只会看到每个前一个的最新的一个:
let observable = ReplaySubject<Int>.createUnbounded()
let observable2 = ReplaySubject<String>.createUnbounded()
let observable3 = Observable<Int>.just(42)
observable.onNext(1)
observable.onNext(2)
observable.onNext(3)
observable.onNext(4)
observable2.onNext("bed")
observable2.onNext("book")
observable2.onNext("table")
let latestObserver = Observable.combineLatest(observable,observable2,observable3)
_ = latestObserver
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
产生输出:(4,“ table”,42)
这真的是预期的行为吗?