更新Moya / RxSwift中断我的网络通话

时间:2018-06-27 05:43:52

标签: ios swift rx-swift moya

将我的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(…)
        }
}

在更新后,RxMoyaProviderMoyaProvider所代替,而您应该使用.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服务的更新均已正确完成

  1. 如何重新进行此操作(理想情况下无需完全更改整个设置,并且
  2. (为了获得额外的荣誉),我如何充分利用Single而不是Observable的更新设置(因为我假设使用asObservable只是想念有用的功能/更简洁的代码)

1 个答案:

答案 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

  

请始终记住保留您的提供商,因为如果您这样做,他们将被释放。

我想他们在某个时候更新了如何取消分配这些提供程序?