Iphone 使用moya_modelMapper映射moya结果
我的webservice类中有以下函数:Iphone 使用moya_modelMapper映射moya结果,iphone,swift,rx-swift,moya,Iphone,Swift,Rx Swift,Moya,我的webservice类中有以下函数: func loadTransport() -> Observable<[TransportResponse]> { let nonce = "\(Date().timeIntervalSince1970)" let csaKey = try! config.apikey() let csaSecret = try! config.apiSecret() let csaS
func loadTransport() -> Observable<[TransportResponse]> {
let nonce = "\(Date().timeIntervalSince1970)"
let csaKey = try! config.apikey()
let csaSecret = try! config.apiSecret()
let csaSignature = crypto.generateSignature(nonce: nonce, url: "http://*****/v1/nmbs", body: "", secret: csaSecret)
print("SIGNATURE = \(csaSignature)")
let endpointClosure = { (target: TransportService) -> Endpoint<TransportService> in
let url = target.baseURL.appendingPathComponent(target.path).absoluteString
let endpoint = Endpoint<TransportService>(URL: url, sampleResponseClosure: {.networkResponse(200, target.sampleData)}, method: target.method, parameters: target.parameters)
return endpoint.adding(newHttpHeaderFields: ["CSA-KEY": csaKey,"CSA-NONCE": nonce,"CSA-SIGNATURE": csaSignature])
}
let provider = RxMoyaProvider<TransportService>(endpointClosure: endpointClosure, plugins: [NetworkLoggerPlugin(verbose: true)])
return provider
.request(TransportService.nmbs)
.filterSuccessfulStatusCodes()
.mapArray(type: TransportResponse.self)
}
问题是它出现在我的flatMap方法中,但它从未出现在flatMap下面的贴图中
当我向我的webservice函数添加订阅部分时,如下所示:
let provider = RxMoyaProvider<TransportService>(endpointClosure: endpointClosure, plugins: [NetworkLoggerPlugin(verbose: true)])
provider
.request(TransportService.nmbs)
.filterSuccessfulStatusCodes()
.mapArray(type: TransportResponse.self)
.subscribe { event in
switch event {
case .next(let response):
print(response)
case .error(let error):
print(error)
default: break
}
}.addDisposableTo(disposeBag)
我发现我的回答是正确的。
有谁能帮我解决这个问题吗?问题是一旦loadTransport方法完成,您的提供商就会被解除分配 您正在使用旧版本的Moya。在弱捕获此RxMoyaProvider之前,整个链都不会在next/error/completed发出任何事件 要解决此问题,请将提供程序转换为类作用域变量:
class Webservice {
var provider: RxMoyaProvider<TransportService>?
}
然后像这样使用它:
self.provider = RxMoyaProvider<TransportService>(endpointClosure: endpointClosure, plugins: [NetworkLoggerPlugin(verbose: true)])
return self.provider!
.request(TransportService.nmbs)
.filterSuccessfulStatusCodes()
.mapArray(type: TransportResponse.self)
请发布响应JSON和TransportResponse模型。
self.provider = RxMoyaProvider<TransportService>(endpointClosure: endpointClosure, plugins: [NetworkLoggerPlugin(verbose: true)])
return self.provider!
.request(TransportService.nmbs)
.filterSuccessfulStatusCodes()
.mapArray(type: TransportResponse.self)