【发布时间】:2020-10-27 19:08:34
【问题描述】:
我想将三个 Observable<[Recipe]> 流合并为一个 Observable<[Recipe]>。
let breakfast = Database.database().reference().rx.fetchFireBaseData(recipeType: .breakfast)
.map { $0.filter { UserDefaults.standard.favoriteRecipes.contains($0.fbKey) }}
let dessert = Database.database().reference().rx.fetchFireBaseData(recipeType: .dessert)
.map { $0.filter { UserDefaults.standard.favoriteRecipes.contains($0.fbKey) }}
let cookies = Database.database().reference().rx.fetchFireBaseData(recipeType: .cookies)
.map { $0.filter { UserDefaults.standard.favoriteRecipes.contains($0.fbKey) }}
如果我使用Observable.zip(breakfast, dessert, cookies).do(onNext: { [weak self] value in...
我得到([Recipe], [Recipe], [Recipe])
如果我使用Observable.merge(breakfast, dessert, cookies).do(onNext: { [weak self] value in...
我轮流获得流,这意味着最后一个完成的会覆盖前两个。
如果我使用Observable.concat(breakfast, dessert, cookies).do(onNext: { [weak self] value in...
我得到了与merge 相同的行为。
那么如何将三个流合并为一个而不让它们相互覆盖呢?
为了更好地了解我想要做什么:
return Observable.merge(breakfast, cookies, dessert).do(onNext: { [weak self] value in
self?.content.accept(value.compactMap { FavoritesCollectionViewCellViewModel(favorite: $0)})
})
我想将accept 的所有组合流映射到behaviorRelay,映射到cell 数据。然后content 中继是bound 到collectionView。在观看collectionView 时,使用concat 我可以简要地看到第一个和第二个流,然后将它们替换为最后一个流。
【问题讨论】:
标签: ios swift observable concat rx-swift