Swift中如何从URL响应中获取错误码1009?
如何解析得到NSURLErrorDomain的-1009错误码?
你当前拿到的外层错误属于自定义Domain(kmh.hjui.www),其错误码为0,真正的-1009(对应URLError.Code.notConnectedToInternet)被嵌套在NSUnderlyingError字段中,直接取外层错误的code无法获取到目标错误码。
解决方案:逐层提取底层错误
需要循环遍历错误的NSUnderlyingError,直到找到属于NSURLErrorDomain的错误,再提取其错误码:
func getURLError(from error: Error) -> URLError? { var currentError = error as NSError // 逐层遍历底层错误 while let underlyingError = currentError.userInfo[NSUnderlyingErrorKey] as? NSError { if underlyingError.domain == NSURLErrorDomain { return URLError(_nsError: underlyingError) } currentError = underlyingError } // 检查当前错误本身是否为NSURLErrorDomain类型 if currentError.domain == NSURLErrorDomain { return URLError(_nsError: currentError) } return nil } // 使用示例 if let urlError = getURLError(from: error) { switch urlError.code { case .notConnectedToInternet: showAlertForNoInternetConnection() default: break } }
原理说明
从你提供的错误信息可以看到:
Error Domain=kmh.hjui.www Code=0 "Network connection error, please check the network" UserInfo={... NSUnderlyingError=0x302c8c600 {Error Domain=NSURLErrorDomain Code=-1009 ...}}
外层错误是业务层封装的自定义错误,真正的网络错误被作为底层错误存储在NSUnderlyingErrorKey对应的字段中,通过逐层遍历就能拿到目标错误码。
内容的提问来源于stack exchange,提问作者AppleDeveloper
相关产品推荐
相关产品推荐

