Skip to content

Latest commit

 

History

History
55 lines (49 loc) · 1.42 KB

ErrorTypes.md

File metadata and controls

55 lines (49 loc) · 1.42 KB

Handling different error types

In case of an error you may need to handle it:

provider.request(target) { result in
    switch result {
    case let .success(response):
        // Do sg on success
    case let .failure(error):
        // Handle error here
    }
}

Or RxSwift way:

.do(onError: { error in
    // Handle error here
})

You can do that by a switch on different cases of MoyaError. In case of an .underlying error you can also get the original Error and its properties. e.g. code to be informed about URLError types like NSURLErrorTimedOut or NSURLErrorNotConnectedToInternet

switch moyaError {
case .imageMapping(let response):
    print(response)
case .jsonMapping(let response):
    print(response)
case .statusCode(let response):
    print(response)
case .stringMapping(let response):
    print(response)
case .objectMapping(let error, let response):
    // error is DecodingError
    print(response)
case .encodableMapping(let error):
    print(error)
case .underlying(let nsError as NSError, let response):
    // now can access NSError error.code or whatever
    // e.g. NSURLErrorTimedOut or NSURLErrorNotConnectedToInternet
    print(nsError.code)
    print(nsError.domain)
    print(response)
case .underlying(let error, let response):
    print(error)
    print(response)
case .requestMapping(let url):
    print(url)
case .parameterEncoding(let error):
    print(error)
}