【问题标题】:Updating Moya/RxSwift breaking my network calls更新 Moya/RxSwift 中断了我的网络调用
【发布时间】:2018-12-05 21:45:41
【问题描述】:

将我的 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 服务的更新是正确完成的。

  1. 我怎样才能让它再次工作,(最好不要完全改变整个设置,并且
  2. (获得额外奖励)如何充分利用 Single 而不是 Observable 的更新设置(因为我假设使用 asObservable 我只是错过了有用的功能/更简洁的代码)

【问题讨论】:

    标签: ios swift rx-swift moya


    【解决方案1】:

    似乎问题在于保留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(…)
               }
       }
    }
    

    From the providers documentation:

    始终记住保留您的提供者,因为如果您不这样做,它们将被解除分配。

    我想他们在某些时候更新了这些提供程序如何被释放?

    【讨论】:

    • 感谢 Shim,我也遇到了同样的问题,我费了好大劲才找到你的答案。
    猜你喜欢
    • 2018-04-09
    • 1970-01-01
    • 2017-04-27
    • 2017-11-26
    • 2016-08-23
    • 1970-01-01
    • 2017-01-12
    • 2019-03-18
    • 2016-03-14
    相关资源
    最近更新 更多