SketchK's Studio.

Swift Tips 024 - Using enums for async result types

字数统计: 471阅读时长: 1 min
2019/11/01 Share

每天了解一点不一样的 Swift 小知识

代码截图

01.png

代码出处: Swift Tips 024 by John Sundell

小笔记

这段代码在说什么

截图展示了在处理异步回调时,通过使用枚举类型作为回调函数的参数,可以让代码的自解释性和可读性变得更好。

为什么要使用枚举类型

假设我们不使用枚举类型作为回调函数的参数,我们的代码大体会如下所示:

02.png

相比于之前的代码,我们发现 x 的含义变得十分模糊。

作为调用者,我并不能确定 x 等于 true 的时候,代码到底代表着什么含义;如果 API 设计者的本意是将 true 作为 unavailable 的含义,那我上面的这段代码就大错特错了……

所以为了保险起见,我可能十分有必要去查看 API 文档或者看一下 SDK 的内部实现。虽然可以通过改变方法名来改善这一现状,但极有可能会让方法名变得比较啰嗦,这就变得很不 swift 了,不是么?

所以今天的这个小技巧很好的解决了这个问题!

枚举在 Swift 5 里的一点小变化

鉴于今天的 tips 比较简短,我们不妨再说说枚举在 Swift 5 里的一点小变化,在 Swift 5 之前,你可以编写一个带有可变参数的枚举值:

1
2
3
4
5
6
7
enum X {
case foo(bar: Int...)
}
func baz() -> X {
return .foo(bar: 0, 1, 2, 3)
}

而现在如果这么做就会出错。现在参数改成了一个数组,并且需要显式传入数组:

1
2
3
4
5
6
7
enum X {
case foo(bar: [Int])
}
func baz() -> X {
return .foo(bar: [0, 1, 2, 3])
}

所以要记住,枚举的关联值不能再使用可变参数了哦!

CATALOG
  1. 1. 代码截图
  2. 2. 小笔记
    1. 2.1. 这段代码在说什么
    2. 2.2. 为什么要使用枚举类型
    3. 2.3. 枚举在 Swift 5 里的一点小变化