2017-01-28 29 views
3

我正在使用Moya,Moya_ModelMapperRxSwift來執行網絡請求。 這裏是我的示例代碼:如何從`MoyaError`獲取錯誤狀態碼?

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這是一個枚舉類型。這是MoyaError的source code

謝謝!

+2

'error.response.statuscode' could be it it?由於響應確實包含狀態碼。錯誤包含響應。 – milo526

+1

'(錯誤!!MoyaError).response?.statusCode'正常工作!非常感謝 – kamwysoc

回答

10

從註釋

一個莫亞錯誤遷移不直接包含一個錯誤代碼,它們含有MoyaResponses該做又包含錯誤代碼。

第一種情況下誤差爲MoyaError

let moyaError: MoyaError? = error as? MoyaError 

可選MoyaError將包含一個可選響應,使用可選的鏈接,我們得到:

let response : Response? = moyaError?.response 

最後,我們可以得到響應的狀態代碼。

let statusCode : int? = response?.statusCode 
+0

哇!你的回答挽救了我的生命......謝謝你一千次! –

+0

謝謝你的男人〜這真的很有幫助 –