如何从 `MoyaError` 获取错误状态码?

How to get error statusCode from `MoyaError`?

我正在使用 MoyaMoya_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
    }
}

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

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

但是我不知道如何通过代码获取这个状态码。错误是 MoyaError 这是一个枚举类型。这是一个 source code 的 MoyaError。

谢谢!

从评论迁移

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

第一个错误是MoyaError

let moyaError: MoyaError? = error as? MoyaError

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

let response : Response? = moyaError?.response

最后我们可以得到响应的状态码。

let statusCode : Int? = response?.statusCode

对于 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")
      }