更新 Moya/RxSwift 打断了我的网络通话
Updating Moya/RxSwift breaking my network calls
将我的 iOS 应用程序从 Moya 8 更新到 11,我在网络实用程序 class 中具有以下功能,该功能被调用以从服务器获取数据并将其映射以用于其他 classes:
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
扩展。现在 returns 一个 Single
而不是 Observable
所以为了避免编译器错误我还需要插入 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 中,那么一切正常。
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(…)
}
}
}
From the providers documentation:
Always remember to retain your providers, as they will get deallocated if you fail to do so.
我想他们在某个时候更新了这些提供程序的释放方式?
将我的 iOS 应用程序从 Moya 8 更新到 11,我在网络实用程序 class 中具有以下功能,该功能被调用以从服务器获取数据并将其映射以用于其他 classes:
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
扩展。现在 returns 一个 Single
而不是 Observable
所以为了避免编译器错误我还需要插入 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 中,那么一切正常。
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(…)
}
}
}
From the providers documentation:
Always remember to retain your providers, as they will get deallocated if you fail to do so.
我想他们在某个时候更新了这些提供程序的释放方式?