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

Swift自定义LocalizedError在捕获块中无法获取failureReason问题

问题原因与解决方案

核心问题是属性名拼写错误:
你自定义的NetworkError枚举中,实现的属性是faliureReason(少了一个字母l),但LocalizedError协议规定的用于返回错误原因的属性名称是failureReason。由于属性名不匹配,系统无法识别你定义的错误原因,导致捕获错误时error.failureReason始终返回nil。

修正后的代码

enum NetworkError : LocalizedError {
  case invalidInput(String)
  case unexpected
  case invalidURL(_ url: URL)
  case apiError(statusCode: Int)
  
  // 修正拼写:faliureReason → failureReason
  var failureReason: String? {
    switch self {
    case .invalidInput:
      return "Request body is nil."
    case .unexpected:
      return "Unexpected error occurred."
    case .invalidURL(_):
      return "The provided URL is invalid."
    case .apiError(statusCode: let statusCode):
      return "API request failed with status code: \(statusCode)"
    }
  }
}

可选优化

如果希望.invalidInput的错误原因能直接使用枚举关联的字符串值(比如你传入的"Request body is nil."),可以调整switch分支:

case .invalidInput(let reason):
  return reason

修正后重新运行代码,捕获错误时就能正确获取到failureReason的对应值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 15:07:05