【发布时间】: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 服务的更新是正确完成的。
- 我怎样才能让它再次工作,(最好不要完全改变整个设置,并且
- (获得额外奖励)如何充分利用
Single而不是Observable的更新设置(因为我假设使用asObservable我只是错过了有用的功能/更简洁的代码)
【问题讨论】: