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

