You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:54:56