gpt4 book ai didi

swift - RxSwift 异步请求设计

转载 作者:行者123 更新时间:2023-11-30 11:37:22 24 4
gpt4 key购买 nike

我是 RxSwift 新手,试图找出实现以下目标的最简单方法:

  • 登录应用后,第一个“getData”请求完成。该数据至关重要,将在微调器后面加载。收到后,数据将保存在核心数据数据库中。当此任务完成(使用完成 block )时,将启动下一个请求,该请求应在后台异步运行,此处的数据也保存在数据库中。如果访问显示后一个数据的 View 并且尚未从数据库接收和获取数据,则应显示旋转器。

型号

let subject = ReplaySubject<[MyObject]>.create(bufferSize: 3)
var observable : Observable<[MyObject]>?

init() {
self.observable = subject
}
...

self?.insertFirstDataToDb(firstData){
self?.api.getNextData(param, success: { (data) -> Void in
self?.insertNextDataToDb(firstData)

})
...
}

View Controller

override func viewDidLoad() {
super.viewDidLoad()
setupUI()
// show spinner if data is not available yet
self.myModel?.observable?
.subscribe(onNext : { (additionalData) in
self.updateMyTab(additionalData)
// hide spinner
})
.disposed(by: self.disposeBag)
}

我想这可以在不使用 RxSwift 的情况下完成,会有任何性能问题吗?有什么建议如何解决这个问题吗?

最佳答案

要启动和停止微调器,您可以分别使用 do 运算符的 onSubscribedonNext 闭包。

要依次引导多个请求,我建议使用 flatMapLatest 运算符。为了获得良好的设计,您可以为请求开发一个装饰器,该装饰器将在订阅请求时启动微调器。

关于swift - RxSwift 异步请求设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49603423/

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