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

如何从Alamofire响应中获取正确错误码?示例返回-1020却输出13

问题根因

你拿到的error默认是Alamofire.AFError枚举类型,直接强转NSError读取的code是AFError自身的枚举原始值,其中sessionTaskFailed对应的枚举值恰好是13,并非你需要的底层NSURLError错误码。

解决方法

需要先从AFError中解包出其封装的底层网络错误,再读取code即可:

方法1:匹配枚举Case(兼容性最好)

guard let afError = error as? AFError else {
    // 非AFError类型错误的处理逻辑
    let code = (error as NSError).code
    return
}

switch afError {
case .sessionTaskFailed(let underlyingError):
    let nsError = underlyingError as NSError
    print(nsError.code) // 此处输出预期的-1020
default:
    // 其他类型AFError处理
    let code = afError.responseCode ?? (afError as NSError).code
}

方法2:使用内置属性(写法更简洁)

Alamofire为AFError内置了underlyingError便捷属性,可以直接读取嵌套的原始错误:

if let afError = error as? AFError,
   let underlyingError = afError.underlyingError as? NSError {
    print(underlyingError.code) // 输出-1020
}
额外建议

判断系统网络错误时建议使用系统提供的枚举常量,避免硬编码数值:

if underlyingError.code == NSURLErrorDataNotAllowed {
    // 对应错误码-1020,处理数据连接被禁止的逻辑
}

内容的提问来源于stack exchange,提问作者tp2376

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 18:45:05