将我的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
扩展名。现在,它返回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
只是想念有用的功能/更简洁的代码)答案 0 :(得分:3)
似乎问题在于保留了if (UIApplication.shared.canOpenURL(URL(string:"comgooglemaps://")!)) {
UIApplication.shared.openURL(URL(string:"comgooglemaps://?center=\(self.location.coordinate.latitude),\(self.location.coordinate.longitude)&zoom=14&views=traffic&q=\(self.location.coordinate.latitude),\(self.location.coordinate.longitude)")!)
} else {
print("Can't use comgooglemaps://")
}
对象……如果我将提供程序移到函数外部并将其作为属性存储在类中,则一切正常。
MoyaProvider
From the providers documentation:
请始终记住保留您的提供商,因为如果您这样做,他们将被释放。
我想他们在某个时候更新了如何取消分配这些提供程序?