Iphone 使用moya_modelMapper映射moya结果

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

我的webservice类中有以下函数:

 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)