swift学习-枚举(Enumerations)

枚举语法:

使用enum关键词来创建枚举并且把它们的整个定义放在一对大括号内,比如:

swift学习-枚举(Enumerations)_第1张图片

当然也可以这样写

枚举中定义的值(如north,south,east和west)是这个枚举的成员值(或成员)。你可以使用case关键字来定义一个新的枚举成员值。

注意:与Objective-C不同,Swift的枚举成员在被创建时不会被赋予一个默认的整型值,相反这些枚举成员本身就是完备的值,这些值的类型是已经明确定义好的CompassPoint类型

关联值:

在Swift中枚举可以存储任意类型的关联值。如下方式定义表示两种商品条形码的枚举

swift学习-枚举(Enumerations)_第2张图片

下面我们定义一个名为Barcode的枚举类型

swift学习-枚举(Enumerations)_第3张图片

判断这个枚举类型的值,这次我们不仅可以使用switch语句来检查不同的条码类型,我们还可以提取每个关联值做为常量let或者变量var来使用

swift学习-枚举(Enumerations)_第4张图片

原始值:

作为关联值的替代选择,枚举成员可以被默认值(成为原始值)预填充,但是这些原始值的类型必须是相同的。

swift学习-枚举(Enumerations)_第5张图片

注意:原始值和关联值是不同的。原始值是在定义枚举时被预先填充的值,像上述三个ASCII 码。对于一个特定的枚举成员,它的原始值始终不变。关联值是创建一个基于枚举成员的常量或变量时才设置的值,枚举成员的关联值可以变化。

原始值的隐式赋值,如下所示:

swift学习-枚举(Enumerations)_第6张图片
swift学习-枚举(Enumerations)_第7张图片

如果在定义枚举类型的时候使用了原始值,那么将会自动获得一个初始化方法,这个方法接收一个叫做rawValue的参数,参数类型即为原始值类型,返回值则是枚举成员或nil。你可以使用这个初始化方法来创建一个新的枚举实例。

递归枚举:

递归枚举是一种枚举类型,它有一个或多个枚举成员使用该枚举类型的实例作为关联值。使用递归枚举时,编译器会插入一个间接层。你可以在枚举成员前加上indirect来表示该成员可递归。

如下所示:

swift学习-枚举(Enumerations)_第8张图片

或者你也可以

swift学习-枚举(Enumerations)_第9张图片

应用:

swift学习-枚举(Enumerations)_第10张图片

你可能感兴趣的:(swift学习-枚举(Enumerations))