簡體   English   中英

RxSwift - 如何將 Observable 相互附加?

[英]RxSwift - How to append Observables with each other?

我在 RxSwift 中積累 Observable 時遇到問題。 澄清一下,我有一系列藝術家。 對於每個藝術家,我正在調用一個函數,該函數以“Observable<[NewTrack]>”的形式返回藝術家的曲目。 最后,我想要一個累積的 Newtracks 的 observable,“Observable<[NewTrack]>”。

更一般地說,我如何使用 Observables 模擬將項目附加到數組? 我對此的解決方案是下面的代碼,其中我創建了一個 behaviorRelay 來監視數組的狀態並在每次迭代時不斷更新它。 但是我得到的最終結果並不是我所期望的:返回的 Observable<[NewTrack]> 只包含數組中最后一位藝術家的曲目。 我認為我的問題可能與我還想連接兩個可觀察對象中的 2 個數組的事實有關。

let observable = BehaviorRelay<Observable<[NewTrack]>>(value: Observable<[NewTrack]>.empty())
for artist in artists {
    let newTracks = self.sessionService.getNewTracksForArtist(artist: artist)
    let currentTracks = observable.value
    observable.accept(Observable.concat(currentTracks, newTracks))
}
return observable.value

好吧,我把流程畫出來后,我意識到我得到的串聯結果是“[[Artist1Tracks], [Artist2Tracks]]”。 我想要的是“[Artist1Tracks+Artist2Tracks]”。 值得慶幸的是,有一個完美的操作符可以做到這一點:掃描。 這就像reduce,但也會發出每個中間值。 我所做的只是添加到連接線:

observable.accept(Observable.concat(currentTracks, newTracks).scan([], accumulator: +))

實際上,這連接了數組中的所有數組實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM