【问题标题】:How to get error statusCode from `MoyaError`?如何从“MoyaError”获取错误状态码?
【发布时间】:2017-01-28 15:36:03
【问题描述】:

我正在使用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,它是 Enum 类型。这是 MoyaError 的 source code

谢谢!

【问题讨论】:

  • error.response.statuscode 可以吗?由于响应确实包含状态码。并且错误包含响应。
  • (error as! MoyaError).response?.statusCode 有效!非常感谢

标签: ios swift alamofire rx-swift moya


【解决方案1】:

从评论迁移

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

第一种情况是 MoyaError 错误

let moyaError: MoyaError? = error as? MoyaError

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

let response : Response? = moyaError?.response

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

let statusCode : Int? = response?.statusCode

【讨论】:

  • 哇!!你的回答救了我的命...谢谢你千百次!!
  • 我有错误(超时),moyaError.response 为零。我怎样才能检查它到底是什么错误?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-15
    • 2022-01-16
    • 2020-06-26
    • 2014-07-05
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多