Swift Tips 024 - Using enums for async result types
每天了解一点不一样的 Swift 小知识
代码截图
小笔记
这段代码在说什么
截图展示了在处理异步回调时,通过使用枚举类型作为回调函数的参数,可以让代码的自解释性和可读性变得更好。
为什么要使用枚举类型
假设我们不使用枚举类型作为回调函数的参数,我们的代码大体会如下所示:
相比于之前的代码,我们发现 x 的含义变得十分模糊。
作为调用者,我并不能确定 x 等于 true 的时候,代码到底代表着什么含义;如果 API 设计者的本意是将 true 作为 unavailable 的含义,那我上面的这段代码就大错特错了……
所以为了保险起见,我可能十分有必要去查看 API 文档或者看一下 SDK 的内部实现。虽然可以通过改变方法名来改善这一现状,但极有可能会让方法名变得比较啰嗦,这就变得很不 swift 了,不是么?
所以今天的这个小技巧很好的解决了这个问题!
枚举在 Swift 5 里的一点小变化
鉴于今天的 tips 比较简短,我们不妨再说说枚举在 Swift 5 里的一点小变化,在 Swift 5 之前,你可以编写一个带有可变参数的枚举值:
enum X {
case foo(bar: Int...)
}
func baz() -> X {
return .foo(bar: 0, 1, 2, 3)
}
而现在如果这么做就会出错。现在参数改成了一个数组,并且需要显式传入数组:
enum X {
case foo(bar: [Int])
}
func baz() -> X {
return .foo(bar: [0, 1, 2, 3])
}
所以要记住,枚举的关联值不能再使用可变参数了哦!