在 swift 当中,enum 是一等类型。他们采用了很多在传统上只被类所支持的特性。例如计算属性、实例方法。enum 也可以用于定义构造函数提供一个初始值,也可以在原始实现的基础上扩展他们的功能。还可以遵循协议来提供标准的功能。用 enum 表示枚举:
1 | enum CompassPoint { |
关联值
有时候将其他类型的关联值和成员值一起存储起来,比如:
1 | enum Barcode { |
如果枚举成员所有关联值都被提取为常量或者变量,则可以只在成员名称前标注一个let
或者var
。
原始值
枚举成员可以被默认值(称为原始值)填充,这些原始值的类型必须相同
:
1 | enum ASCIIControlCharacter: Character { |
在使用整数作为原始值时,原始值会隐式赋值的值依次递增 1:
1 | enum Planet: Int { |
使用字符串作为枚举类型的原始值时,原始值默认是就该枚举类型的值:
1 | enum CompassPoint: String { |
使用该枚举成员rawValue
可访问该枚举成员的原始值:
1 | let earthsOrder = Planet.earth.rawValue // 3 |
在定义枚举的时候,会自动获得初始化方法,即可以自动创建一个枚举实例:
1 | let possiblePlanet = Planet(rawValue: 7) |
递归枚举
递归枚举
:递归枚举是一种枚举类型,它有一个或多个枚举成员使用该枚举类型的实例作为关联值。使用递归枚举时,编译
器会插入一个间接层。你可以在枚举成员前加上 indirect
来表示该成员可递归。这里使用官方文档中的计算表达式(5 + 4) * 2的例子:
1 | enum ArithmeticExpression { |
另外,也可以再枚举类型开头加上indirect
关键字来表明它的所有成员都是可递归的:
1 | indirect enum ArithmeticExpression { |