RxSwift - withLatestFrom combining values from both observables

Viewed 13871

I want to achieve result like this:

L -1-2-3------4------5-6-7-8----
R ---------A------B----------C--

O ---------A3-----B4---------C8

So basically something like withLatestFrom but combining values from both observables (like combine latest).

I guess there is no ready operator for that. Any idea how to achieve this?

3 Answers

Just use resulting selector from your withLatestFrom. The overloaded implementation without closure simply ignores first observable. For example:

Observable.just("one")
  .withLatestFrom(Observable.just(1)) 
  { oneAsString, oneAsInt in return (oneAsString, oneAsInt) }

Short version where your R = input.r and L = input.l

let output = input.r
.withLatestFrom(input.l) { ($0, $1) }

You can achieve this by using combineLatest with distinctUntilChanged followed by a map.

Observable.combineLatest(L,R) { lhs, rhs in
     return (lhs, rhs)
}
.distinctUntilChanged { last, new in 
     return last.1 != new.1
}
.map { combined in
     //Do your thing to create the combination
}
Related