如何从`MoyaError`获取错误statusCode?

kam*_*soc 3 ios swift alamofire rx-swift moya

我正在使用a Moya,Moya_ModelMapperRxSwift执行网络请求.这是我的示例代码:

let provider = RxMoyaProvider<MyEndpoint>()
let observable: Observable<RegistrationResponse> = provider.request(.register(firstName: "", lastName: "", email: "", password: "")).mapObject(type: RegistrationResponse.self)
observable.subscribe {
    [weak self] (event: Event<RegistrationResponse>) in
    switch event {
    case .next(let response):
        print(response)
    case .error(let error):
        print(error)
    case .completed:
        break
    }
}
Run Code Online (Sandbox Code Playgroud)

一切正常,但我不知道如何409从服务器收到例如状态代码响应类型时获取错误代码.如果我打印错误,我会得到:

jsonMapping(Status Code: 409, Data Length: 0)

但我不知道如何通过代码获取此状态代码.错误是MoyaErrorEnum类型.这是MoyaError 的源代码.

谢谢!

mil*_*526 18

从评论中迁移

Moya错误不直接包含错误代码,它们包含MoyaResponses,而MoyaResponses又包含错误代码.

第一种情况是错误,如MoyaError

let moyaError: MoyaError? = error as? MoyaError
Run Code Online (Sandbox Code Playgroud)

可选的MoyaError将包含一个可选的响应,使用可选的链接我们得到:

let response : Response? = moyaError?.response
Run Code Online (Sandbox Code Playgroud)

最后,我们可以获得响应的状态代码.

let statusCode : int? = response?.statusCode
Run Code Online (Sandbox Code Playgroud)


Nii*_*uda 7

对于那些有nil moyaError.response 的人,这里有一种获取errorCode 的方法

 if let error = ((error as? MoyaError)?.errorUserInfo["NSUnderlyingError"] as? Alamofire.AFError)?.underlyingError as? NSError, error.domain == NSURLErrorDomain, error.code == NSURLErrorNotConnectedToInternet || error.code == NSURLErrorTimedOut || error.code == NSURLErrorNetworkConnectionLost {
                   print("not connected")
      }
Run Code Online (Sandbox Code Playgroud)