我正在使用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
但我不知道如何通过代码获取此状态代码。错误是<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.MainActivity"
>
<data class="MainActivityBinding"></data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/main">
<android.support.v4.view.ViewPager
android:id="@+id/popular_movies_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.TabLayout
android:id="@+id/popular_movies_tablayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top" />
</android.support.v4.view.ViewPager>
</RelativeLayout>
</layout>
,这是一个枚举类型。这是MoyaError的source code。
谢谢!
答案 0 :(得分:14)
从评论中迁移
Moya错误不直接包含错误代码,它们包含MoyaResponses,而MoyaResponses又包含错误代码。
第一种情况是错误,如MoyaError
let moyaError: MoyaError? = error as? MoyaError
可选的MoyaError将包含一个可选的响应,使用可选的链接我们得到:
let response : Response? = moyaError?.response
最后,我们可以获得响应的状态代码。
let statusCode : int? = response?.statusCode
答案 1 :(得分:1)
对于具有 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")
}