gpt4 book ai didi

swift - 使用 Realm add()/setValue() 链接 RxSwift 请求

转载 作者:行者123 更新时间:2023-11-30 11:36:06 26 4
gpt4 key购买 nike

假设我有 2 个函数,具有 2 个不同的 Observable 返回类型:

func getWatchedMovies() -> Observable<[TraktMovie]>
func getDetails(id: Int, language: String) - > Observable<TMDbMovie>

我想对 getWatchedMovies() 请求中的每个值进行 flatMap,以便能够像这样请求每部电影的详细信息(我不确定这是最好的方法) ..)

 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 并使用嵌套请求值更新名为 tmdbMovieTraktMovie 属性Realm 中也是 TMDbMovie 类型。

我的意思是:

  • 首先,我需要循环输入 [TraktMovie] 数组,将其每个值保存在 Realm 中(例如名为 traktMovie 的对象)
for traktMovie in traktMovies {
let realm = try! Realm()
realm.write {
realm.add(traktMovie)
}
}
  • 其次,我需要通过第二个请求检索每个 TraktMovie 对象的详细信息(例如 getDetails(_ , _)):使用类似 flatMap

  • 第三,我需要使用 getDetails 请求检索到的值更新每个 traktMovie 对象属性(例如 tmdbMovie对于检索到的值):

traktMovie.setValue(tmdbMovie, forKeyPath: "tmdbMovie")

这里,我从第一个请求 (getWatchedMovies()) 中检索到一个名为 traktMovie 的对象,并更新了其名为 tmdbMovie 的属性之一从第二个请求 (getDetails(_, _)) 检索到的对象也名为 tmdbMovie

问题是我的第一个请求返回一个数组,第二个请求仅返回一个对象。

如果我返回 TMDbMovie 对象,我只会得到一个带有 onNext 事件的对象,并且我会丢失我的 [TraktMovie] 数组。

希望我说得足够清楚。

非常感谢您的帮助! 😅

最佳答案

您可以尝试使用Observable.zip为此,如下例所示:

 getWatchedMovies()
.flatMap({ [unowned self] (traktMovies) -> Observable<[TraktMovie]> in
let movieDetails = traktMovies.flatMap { movie in
// you can save in realm here
return Observable.just(movie)
.withLatestFrom(self.getMovieDetails(id: 0, language: "")) { movie, details in
// here you have both movie & movieDetails
return movie
}
}
return Observable.zip(movieDetails, { return $0 })
})

这可能有点冒险,如果 getMovieDetails 之一失败,它将导致整个流失败,并且它需要所有 getMovieDetails 发出 onNext 事件,以便压缩 Observable 以发出值。

关于swift - 使用 Realm add()/setValue() 链接 RxSwift 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49751752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com