如何从 `MoyaError` 获取错误状态码?
How to get error statusCode from `MoyaError`?
我正在使用 Moya
、Moya_ModelMapper
和 RxSwift
来执行网络请求。
这是我的示例代码:
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")
}
我正在使用 Moya
、Moya_ModelMapper
和 RxSwift
来执行网络请求。
这是我的示例代码:
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")
}