0Pricing
Swift Academy · 课时

使用 LocalizedError 自定义错误类型

设计丰富的错误枚举,使其遵循 Error 和 LocalizedError。

使用 LocalizedError 自定义错误类型 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。

欢迎

设计良好的错误类型会携带足够的上下文,以便诊断问题并显示便于用户理解的消息。`LocalizedError` 为此提供了所需的接口。

基本错误枚举

```swift enum AuthError: Error { case invalidCredentials case accountLocked(until: Date) case networkUnavailable } ```

LocalizedError 协议

```swift extension AuthError: LocalizedError { var errorDescription: String? { switch self { case .invalidCredentials: return "Username or password is incorrect." case .accountLocked(let date): return "Account locked until \(date.formatted())." case .networkUnavailable: return "No internet connection." } } } print(AuthError.invalidCredentials.localizedDescription) ```

failureReason 与 recoverySuggestion

```swift extension AuthError: LocalizedError { var failureReason: String? { "Authentication service rejected the request." } var recoverySuggestion: String? { "Reset your password or contact support." } } ```

嵌套错误上下文

```swift enum APIError: Error { case server(statusCode: Int, body: String) case decode(underlying: DecodingError) case timeout } ``` 请携带底层错误,以便在日志中记录,或在调试构建中显示。

抛出自定义错误

```swift func login(user: String, pass: String) throws -> Token { guard !user.isEmpty && !pass.isEmpty else { throw AuthError.invalidCredentials } // ... } ```

捕获特定情况

```swift do { let token = try login(user: u, pass: p) } catch AuthError.invalidCredentials { showAlert("Bad credentials") } catch AuthError.accountLocked(let date) { showAlert("Locked until \(date)") } catch { showAlert(error.localizedDescription) } ```

CustomDebugStringConvertible

```swift extension AuthError: CustomDebugStringConvertible { var debugDescription: String { "AuthError.\(self)" } } ```

错误包装模式

```swift enum AppError: Error { case auth(AuthError) case api(APIError) case unknown(Error) } func process() throws { do { try login() } catch let e as AuthError { throw AppError.auth(e) } catch { throw AppError.unknown(error) } } ```

用于测试的可比较错误

```swift enum FetchError: Error, Equatable { case notFound case serverError(code: Int) } XCTAssertEqual(error, FetchError.notFound) ```

快速检查

哪个协议为面向用户的错误消息提供 `errorDescription`?

回顾

要点回顾: • 让错误遵循 `LocalizedError`,以提供面向用户的消息 • 使用关联值携带上下文(状态码、日期) • 将较低层的错误包装在特定领域的枚举中 • `Equatable` 错误可以简化单元测试 • `CustomDebugStringConvertible` 有助于调试 下一节:将结果类型桥接到异步/等待。

常见问题解答

「使用 LocalizedError 自定义错误类型」课时是免费的吗?

是的 — 「使用 LocalizedError 自定义错误类型」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。

「使用 LocalizedError 自定义错误类型」这节课中我会学到什么?

设计丰富的错误枚举,使其遵循 Error 和 LocalizedError。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「使用 LocalizedError 自定义错误类型」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Swift Academy 课中编写并运行代码吗?

能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Result 基础
  2. Result 上的 map 与 flatMap
  3. 使用 LocalizedError 自定义错误类型
  4. 将 Result 衔接到 async/await
← 返回 Swift Academy