kam*_*soc 3 ios swift alamofire rx-swift moya
我正在使用a 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
}
}
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)
对于那些有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)
| 归档时间: |
|
| 查看次数: |
3307 次 |
| 最近记录: |