# 自定义错误类型

URL: https://caijiao.org/swift/09-error-handling/04-custom-errors
Source: docs/swift/09-error-handling/04-custom-errors.md
Description: 本章介绍如何在 Swift 中自定义错误类型，定义符合 Error 协议的枚举，实现丰富的错误处理机制。

Swift 允许开发者自定义错误类型，通过枚举实现更清晰的错误分类和处理。

## 定义自定义错误

创建符合 `Error` 协议的枚举，列举具体错误情况：

```swift
enum LoginError: Error {
    case invalidUsername
    case invalidPassword
    case networkUnavailable
}
````

## 抛出自定义错误

在函数中使用 `throw` 抛出对应错误：

```swift
func login(username: String, password: String) throws {
    guard username == "admin" else {
        throw LoginError.invalidUsername
    }
    guard password == "123456" else {
        throw LoginError.invalidPassword
    }
    // 模拟网络不可用
    throw LoginError.networkUnavailable
}
```

## 处理自定义错误

使用 `do-catch` 捕获并处理错误：

```swift
do {
    try login(username: "user", password: "123456")
} catch LoginError.invalidUsername {
    print("用户名无效")
} catch LoginError.invalidPassword {
    print("密码错误")
} catch LoginError.networkUnavailable {
    print("网络不可用")
} catch {
    print("未知错误")
}
```

自定义错误类型提高错误表达的准确性和代码可维护性。
