rxswift:如何获得可观察的<;任何>;产生可观察的组合<;[类别]>;?
我对我的方法有些怀疑。我有两种类型的观测值:rxswift:如何获得可观察的<;任何>;产生可观察的组合<;[类别]>;?,swift,reactive-programming,rx-swift,reactivex,reactive,Swift,Reactive Programming,Rx Swift,Reactivex,Reactive,我对我的方法有些怀疑。我有两种类型的观测值: //I can fetch from the server the houses and save them in the database func houses() -> Observable<[House]> //Given a houseId, I can fetch it's details and save them in the database func houseDetail(id: Int) -> Obs
//I can fetch from the server the houses and save them in the database
func houses() -> Observable<[House]>
//Given a houseId, I can fetch it's details and save them in the database
func houseDetail(id: Int) -> Observable<Family>
//我可以从服务器获取房屋并将其保存在数据库中
func houses()->可观察
//给定一个houseId,我可以获取它的详细信息并将它们保存在数据库中
func house detail(id:Int)->可观察
我想做一个观察,先把所有的房子都拍下来,然后再把所有的家庭拍下来。我所做的是这样的:
//I am an observable which, when I complete, all data are saved
func fetchAllHousesAndFamily() -> Observable<Any> {
var allHousesObservables: [Observable] = []
for house in houses {
allHousesObservables.append(houseDetail(house.id))
}
return Observable.combineLatest(allHousesObservables)
}
//我是一个可观察对象,当我完成时,所有数据都会被保存
func fetchAllHousesAndFamily()->可观察{
var allHousesObservables:[可观察]=[]
挨家挨户{
allHousesObservables.append(houseDetail(house.id))
}
可观察的返回。组合测试(allHousesObservables)
}
但这对我来说并不是一种反应式的风格,而且似乎是一种黑客行为,因为我对rx运营商了解不够
在rxworld中,您有正确的方法吗
谢谢要从
房屋
的结果中获取所有家庭,您需要使用平面图
操作符flatMap
接受带有签名的闭包T->Observable
,因此,在我们的具体示例中,它将是[House]->Observable
类型的函数
要从
houses
的结果中获取所有族,您需要使用flatMap
操作符flatMap
接受带有签名的闭包T->Observable
,因此,在我们的具体示例中,它将是[House]->Observable
类型的函数
我认为你的任务有一个更优雅的解决方案。您可以在Github上与您的任务共享示例代码吗?我想帮助你。我认为你的任务有一个更优雅的解决方案。您可以在Github上与您的任务共享示例代码吗?我想帮助你。
houses().flatMap { houses in
let details: [Observable<Family>] = houses.map { houseDetail($0.id) } // [1]
return Observable.from(details).merge() // [2]
}
let details: [Observable<(House, Family)>] = house.map { house in
houseDetail(house.id).map { (house, $0) }
}