Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
rxswift:如何获得可观察的<;任何>;产生可观察的组合<;[类别]>;?_Swift_Reactive Programming_Rx Swift_Reactivex_Reactive - Fatal编程技术网

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) }
}