Alamofire 5获取错误代码以检查互联网连接



我将Alamofire 5用于我的网络层,我已将网络错误定义如下。

我正在检查response.error.isNetworkError我总是错误的,因为现在我得到的代码是9,而不是-109/

extension Error {
var code: Int { return (self as NSError).code }
var domain: String { return (self as NSError).domain }
var isNetworkError: Bool {
switch code {
case NSURLErrorCannotFindHost,
NSURLErrorDNSLookupFailed,
NSURLErrorDataNotAllowed,
NSURLErrorNetworkConnectionLost,
NSURLErrorNotConnectedToInternet:
return true
default:
return false
}
}
}

这可能会对某人有所帮助。使用新的Alamofire 5,可以将AFError广播到NSError。所以,如果你只需要得到一个代码,你可以做这个

if let nsError = error as NSError? {
nsError.code
...

如果你需要检查互联网连接。您可以检查一些特定的错误类型,例如:

if let afError = error?.asAFError {
if afError.isSessionTaskError {
...

最后,如果你需要得到URLError,这可以从潜在的错误中实现,你应该做一些类似的事情

if let afError = error?.asAFError {
if let urlError = afError.underlyingError as! URLError?, urlError.code == URLError.notConnectedToInternet {
...

你可以得到像这样的Http错误:

guard let error = (response.error?.underlyingError as? URLError) else { return }

switch error.code {
case .timedOut:
// Do SomeThing
case .notConnectedToInternet:
// Do SomeThing
default:
break
}
(afError.underlyingError as? NSError)?.errorCode == NSURLErrorNotConnectedToInternet

这应该工作

最新更新