更新 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(…)
        }
}

随着更新,RxMoyaProviderMoyaProvider 取代,您应该使用 .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 服务的更新已正确完成.

  1. 我如何让它再次工作,(最好不要完全改变整个设置,并且
  2. (额外加分)我如何充分利用 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.

我想他们在某个时候更新了这些提供程序的释放方式?