我将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
这应该工作