web-dev-qa-db-ja.com

オブザーバブルの配列から配列のオブザーバブルを作成するにはどうすればよいですか?

Observable<ConvertedThing>を返す非同期関数を使用して、Thingオブジェクトに変換したいConvertedThingオブジェクトの配列があります。

すべての変換が完了したときに1つの値を出力するObservable<[ConvertedThing]>を作成したいと思います。

どうすればこれを達成できますか?助けていただければ幸いです!

28
Paul

.merge() を使用してオブザーバブルの配列を単一のオブザーバブルに結合し、次に .toArray() を使用してオブザーバブルを取得できます。単一のイベントのリスト。

RxSwift 3+の場合:

let arrayOfObservables: [Observable<E>] = ...
let singleObservable: Observable<E> = Observable.from(arrayOfObservables).merge()
let wholeSequence: Observable<[E]> = singleObservable.toArray()

以前のバージョンの場合:

let arrayOfObservables: [Observable<E>] = ...
let singleObservable: Observable<E> = arrayOfObservables.toObservable().merge()
let wholeSequence: Observable<[E]> = singleObservable.toArray()
35
kennytm

将来の読者向け:

.merge() および .toArray() を使用すると、すべての観測可能なシーケンスが完了すると、単一の要素が放出されます。オブザーバブルのいずれかが放出し続ける場合、放出も完了もしません。

.combineLatest() を使用すると、観察可能な変更があるたびに完全なリストを出力するObservableが返されます。

let arrayOfObservables: [Observable<E>] = ...
let wholeSequence: Observable<[E]> = Observable.combineLatest(arrayOfObservables) { $0 }
20
redent84