我正在尝试实现类似的东西,
let api1 = Observable.of(["documents"]) //Replace with observable to download docs
let api2 = Observable.of(["applications"]) //Replace with observable to download apps
let api3 = Observable.of(["videos"]) //Replace with observable to download videos
Observable.combineLatest(api1,api2,api3){(docs,apps,videos) in
return (docs,videos)
}.skipWhile{ (docs,videos) in
return docs.count == 0 && apps.count == 0 && videos.count == 0
}.subscribe(onNext:{(docs,videos) in
})
.disposed(by:disposeBag)
就我而言,我试图动态创建可观察对象并将其添加到这样的数组中,
private var discoverObservables = [Observable<Any>]()
func loadDiscoverFeeds(){
self.feeds.forEach({
feed in
switch feed.feedType{
case "a":
let observable = self.aObservable(url: feed.feedURL ?? "")
self.discoverObservables.append(observable)
break
case "b":
let observable = self.bObservable(url: feed.feedURL ?? "")
self.discoverObservables.append(observable)
break
case "c":
let observable = self.cObservable(url: feed.feedURL ?? "")
self.discoverObservables.append(observable)
break
case "d" :
let observable = self.dObservable(url: feed.feedURL ?? "")
self.discoverObservables.append(observable)
break
default:
break
}
})
}
private func aObservable(url : String) -> Observable<A?>{
return APIManager.shared.geta(url: url)
}
private func bObservable(url : String) -> Observable<B?>{
return APIManager.shared.getB(url: url)
}
private func cObservable(url : String) -> Observable<C?>{
return APIManager.shared.getc(url: url)
}
但是这不起作用,因为discoverObservables数组期望使用类型Observable<Any>
的值,并且我试图添加 Observable
如何正确执行此操作,我想确保所有可观察对象在开始处理数据之前都返回数据。
修改 我试图从不同来源加载数据,然后再添加到视图中,基本上,我有一个collectionview,每个部分都从不同的API加载数据,我试图从所有来源获取所有必需的数据,然后再添加到集合中视图。