web-dev-qa-db-ja.com

RxSwift-両方のオブザーバブルの値を組み合わせたwithLatestFrom

私はこのような結果を達成したいです:

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

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

つまり、基本的にwithLatestFromのようなものですが、両方のオブザーバブルの値を組み合わせます(combinate latestなど)。

そのための準備ができているオペレーターはいないと思います。これを達成する方法はありますか?

12
Wujo

withLatestFromの結果のセレクターを使用するだけです。クロージャーなしのオーバーロードされた実装は、最初のオブザーバブルを単に無視します。例えば:

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

これは、combineLatestdistinctUntilChangedの後に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
}
2
Caio Sym

R = input.rおよびL = input.lのショートバージョン

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