HackingSwift: What’s new in Swift 5.0
Result 还是 Result
背景
在异步获取数据的场景中,常见的回调的数据结构是这样的:表示获取成功的数据,表示获取失败的 error。因为数据可能获取成功,也可能失败。因此回调中的数据和错误都是 optional 类型。
比如 CloudKit 中保存数据的一个函数就是这样:
func save(_ record: CKRecord, completionHandler: @escaping (CKRecord?, Error?) -> Void)
这种形式的缺点是没有体现出两种结果的互斥关系:如果数据成功获取到了,那么 error 一定为空。如果 error 有值,数据一定是获取失败了。
Swift 中枚举的能力相比 OC 有着很大的进步,每个枚举值除了可以是常规的基础类型,还可以是一个关联的类型。有了这样的特性后用枚举来优化返回结果的数据结构显得水到渠成:
enum Result where Failure : Error { /// A success, storing a `Success` value. case success(Success) /// A failure, storing a `Failure` value. case failure(Failure)}
基本用法

本文介绍了Swift 5.0中引入的Result枚举类型,用于优化异步操作的返回结果表示。Result枚举使得成功值和错误能够明确互斥,避免了使用optional带来的问题。文章详细讲解了Result的基本用法,包括如何创建、拆包,以及相关的便利方法如map、flatMap、get等,并讨论了其与Equatable和Hashable的交互。此外,还提到了可抛出异常的闭包初始化器,帮助开发者更好地处理可能出现的异常情况。
最低0.47元/天 解锁文章
2043

被折叠的 条评论
为什么被折叠?



