6

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

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

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

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

谢谢!

4

2 回答 2

28

从评论迁移

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

第一种情况是 MoyaError 错误

let moyaError: MoyaError? = error as? MoyaError

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

let response : Response? = moyaError?.response

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

let statusCode : Int? = response?.statusCode
于 2017-01-28T15:55:54.430 回答
4

对于那些没有 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")
      }
于 2020-09-17T15:40:35.287 回答