【发布时间】:2018-09-19 23:05:43
【问题描述】:
假设我有 2 个具有 2 个不同 Observable 返回类型的函数:
func getWatchedMovies() -> Observable<[TraktMovie]>
func getDetails(id: Int, language: String) - > Observable<TMDbMovie>
我想对我的getWatchedMovies() 请求中的每个值进行平面映射,以便能够像这样请求每部电影的详细信息(但我不确定这是不是最好的方法......)
traktDataManager?
.getWatchedMovies()
.flatMap({ (traktMovies) -> Observable<[TraktMovie]> in
let moviesObs = Observable.from(traktMovies)
let movieDetails = moviesObs.flatMap {
self.tmdbDataManager!.getMovieDetails(id: $0.ids.tmdb, language: Device.lang)
}
})
问题是,我需要将每个 TraktMovie 添加到 Realm 并更新一个名为 tmdbMovie 的 TraktMovie 属性,并在 Realm 中使用 TMDbMovie 类型的嵌套请求值。
我的意思是:
- 首先,我需要在我的
[TraktMovie]数组中循环以将它的每个值保存在Realm 中(比如一个名为traktMovie的对象)
for traktMovie in traktMovies {
let realm = try! Realm()
realm.write {
realm.add(traktMovie)
}
}
其次,我需要使用第二个请求(例如
getDetails(_ , _))检索每个TraktMovie对象的详细信息:使用flatMap之类的东西?第三,我需要使用
getDetails请求检索到的值更新每个traktMovie对象属性(例如tmdbMovie检索到的值):
traktMovie.setValue(tmdbMovie, forKeyPath: "tmdbMovie")
在这里,我从第一个请求 (getWatchedMovies()) 检索到一个名为 traktMovie 的对象,并使用从第二个请求 (getDetails(_, _)) 检索到的对象 (@987654343) 更新其一个名为 tmdbMovie 的属性@
问题是我的第一个请求返回一个数组,第二个只有一个对象。
如果我返回 TMDbMovie 对象,我只会得到一个带有 onNext 事件的对象,并且我会丢失我的 [TraktMovie] 数组。
希望我已经足够清楚了。
非常感谢您的帮助! ????
【问题讨论】:
-
我不明白,请补充更多信息
标签: swift realm observable rx-swift flatmap