ios - 更新 Moya/RxSwift 中断了我的网络调用
问题描述
将我的 iOS 应用程序从 Moya 8 更新到 11,并且我在网络实用程序类中有以下函数,该函数被调用以从服务器获取数据并将其映射以供其他类使用:
func getServerData(endpoint: MyMoyaService) -> Observable<Any> {
let provider = RxMoyaProvider<MyMoyaService>()
return provider.request(endpoint)
.filterSuccessfulStatusAndRedirectCodes()
.mapJSON()
.flatMap { response -> Observable<Any> in
return Observable(…)
}
}
随着更新,RxMoyaProvider
被替换为MoyaProvider
,而不是你应该用来使用.rx
扩展RxSwift
。现在返回 aSingle
而不是Observable
so 为了避免我还需要插入的编译器错误asObservable()
func getServerData(endpoint: MyMoyaService) -> Observable<Any> {
let provider = MoyaProvider<MyMoyaService>()
return provider.rx.request(endpoint)
.asObservable()
.filterSuccessfulStatusAndRedirectCodes()
.mapJSON()
.flatMap { response -> Observable<Any> in
return Observable(…)
}
}
但是该flatMap
部分根本没有被调用,我的网络调用不再起作用。如果我在没有 RxSwift 的情况下执行此操作,只需打开结果,它就可以正常工作(但这不适合我当前的设置),所以我知道网络调用和自定义TargetType
服务的更新都正确完成。
- 我怎样才能让它再次工作,(理想情况下不完全改变整个设置,和
- (以获得额外的信用)我如何充分利用更新的设置
Single
而不是Observable
(因为我假设通过使用asObservable
我只是错过了有用的功能/更清洁的代码)
解决方案
似乎问题在于保留MoyaProvider
对象......如果我将提供程序移到函数之外并将其作为属性存储在类中,那么一切都会正常工作。
class MyClass {
let provider = MoyaProvider<MyMoyaService>()
func getServerData(endpoint: MyMoyaService) -> Observable<Any> {
return provider.rx.request(endpoint)
.asObservable()
.filterSuccessfulStatusAndRedirectCodes()
.mapJSON()
.flatMap { response -> Observable<Any> in
return Observable(…)
}
}
}
永远记住保留您的提供者,因为如果您不这样做,他们将被取消分配。
我想他们在某个时候更新了这些提供者是如何被解除分配的?
推荐阅读
- json - 从 jq 请求中检索空值
- google-sheets - 根据日期对多个电子表格中的值求和
- javascript - Console.logging,然后在 javascript 函数中返回 console.log
- javascript - 如何使用 Ajax 和会话令牌发出 REST API 请求?
- django - Django AutoComplete Light Filter 外键值
- python - 使用 IDE 控制台在 anaconda 提示符下执行命令
- autodesk-forge - forge Viewer - 标记相机更改问题
- laravel - 社交名流,google api 错误“GET https://www.googleapis.com/userinfo/v2/me?prettyPrint=false”导致“401 Unauthorized”
- node.js - 我不知道为什么我的 http 请求在我的 Angular 项目中不起作用?
- php - 显示所有帖子的自定义分类档案