У меня есть требование запросить Article
.
Каждый Article
содержит массив ArticleAsset
, который имеет различные свойства, которые мне нужны при рендеринге всей статьи.
Я не знаю заранее, сколько ресурсов существует в статье, поэтому я должен запросить статью, а затем с помощью assets
prop отправить X количество запроса, чтобы вернуть значение каждого ArticleAsset
.
На этом этапе я должен вернуть и статью, и массив результатов для моих выборок активов.
Для простоты представьте, что в этом случае каждый актив возвращает Int
. Итак, я начну с этого -
Article
> [Article]
Я ожидал бы получить кортеж следующей формы (article: Article, assets: [Int])
Я попытался воссоздать это как игровую площадку ниже, но безуспешно и немного застрял.
Я понимаю, как связать фиксированное количество запросов, используя flatMapLatest
и т. Д., Но в этом случае я не знаю количество запросов. Я думаю, что мне нужно сопоставить каждый ArticleAsset
и вернуть массив Observables
, но я начинаю очень нечетко понимать, куда идти дальше.
Любая помощь будет принята с благодарностью, пожалуйста, и спасибо.
import UIKit
import RxSwift
private let disposeBag = DisposeBag()
struct Article {
let id: UUID = UUID()
var assets: [ArticleAsset]
}
struct ArticleAsset {
let number: Int
}
let assets: [ArticleAsset] = Array(0...4).map { ArticleAsset(number: $0) }
let article = Article(assets: assets)
func fetchArticle() -> Observable<Article> {
return Observable.of(article)
}
func getArticleAsset(asset: ArticleAsset) -> Observable<Int> {
return .of(asset.number)
}
fetchArticle()
.map { art in
let assets = art.assets.map { getArticleAsset(asset: $0) }
let resp = (article: art, assets: Observable.of(assets))
return resp
}.subscribe(onNext: { resp in
// I would like my subscriber to receive (article: Article, assets: [Int])
}).disposed(by: disposeBag)