16

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?

Wujo
  • 1,845
  • 2
  • 25
  • 33

3 Answers3

24

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) }
Timofey Solonin
  • 1,393
  • 13
  • 20
3

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

let output = input.r
.withLatestFrom(input.l) { ($0, $1) }
milczi
  • 7,064
  • 2
  • 27
  • 22
2

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
}
Mick
  • 30,759
  • 16
  • 111
  • 130
Caio Sym
  • 364
  • 1
  • 7