Result 在 Swift 5 中正式新增的(2019 年随 Xcode 10.2 发布)。在 Swift 5 之前,开发者通常会自己定义类似的枚举:
enum Result<Success, Failure: Error> {
case success(Success)
case failure(Failure)
}
因为这种模式非常常见(网络请求、I/O、异步回调等),Swift 团队将其标准化并纳入标准库,统一了 API 设计方式。
基本定义
Result 是一个带泛型参数的枚举,用于表达“成功或失败的计算结果”。它的定义等价于:
public enum Result<Success, Failure: Error> {
case success(Success)
case failure(Failure)
}
双分支状态容器,当成功时返回Success,失败时返回Failure。
适用于异步回调、网络请求、I/O等场景。
基本用法
1、创建枚举
let ok = Result<Int, MyError>.success(10)
let fail = Result<Int, MyError>.failure(.timeout)
2、处理返回结果
switch result {
case .success(let value):
print("value =", value)
case .failure(let error):
print("error =", error)
}
3、使用模式匹配简写:
if case let .success(value) = result {
print(value)
}
4、配合回调:
func loadFile(path: String, completion: (Result<Data, any Error>) -> Void) {
do {
let data = try Data(contentsOf: URL(fileURLWithPath: path))
completion(.success(data))
} catch {
completion(.failure(error))
}
}
链式变换
1、转换成功值
let r2 = result.map { $0 * 2 }
2、转换错误类型
let r3 = result.mapError { MyError.wrap($0) }
3、链式组合:
let r4 = result.flatMap { value in
otherOperation(value)
}
总结
Result是一个枚举,可以显式传递、存储、组合、映射返回值。
常用于网络请求、I/O、异步回调等场景,当成功时返回Success、失败时返回Failure。
