如何从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
相关产品推荐
相关产品推荐

