Swift Result类型
Swift Result类型

Swift Result类型

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。

相关文章

1、Swift并发Task.result属性

2、Swift模式匹配

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注