# try? 与 try!

URL: https://caijiao.org/swift/09-error-handling/03-try-optional
Source: docs/swift/09-error-handling/03-try-optional.md
Description: 本章介绍 Swift 中 'try?' 和 'try!' 的用法，帮助开发者简化错误处理并理解风险。

Swift 提供了两种简化错误处理的方式：`try?` 和 `try!`，适用于不同场景。

## try?

`try?` 将抛出错误的表达式转换为可选值，如果抛错返回 `nil`，否则返回正常结果。

```swift
func loadData() throws -> String {
    // 可能抛出错误
    return "数据"
}

let result = try? loadData()
if let data = result {
    print("加载成功：\(data)")
} else {
    print("加载失败")
}
````

适合错误可以忽略或无需详细处理的场景。

## try!

`try!` 表示确定不会抛错，直接执行，如果出错程序将崩溃。

```swift
let data = try! loadData()
print(data)
```

适合错误几乎不可能发生，或愿意让程序因错误崩溃的场景，使用时需谨慎。

## 总结

* `try?` 安全，返回可选，适合容错处理。
* `try!` 不安全，直接执行，适合确保无错误的代码。

合理选择 `try?` 和 `try!`，提高代码健壮性与简洁性。
