你可以使用枚举(enumeration)定义一个受限的值得集合。枚举可以让你的代码变得清晰,因为它可以让你用描述性的名字代替那些像整数值那样抽象的事物。
如果你想使用枚举描述机器状态,可以使用如下代码:
enum State {
case Inactive
case Active
case Hibernate
case Terminated
}
var machineState =State.Inactive
在上述代码中,你定义了一个名为State的枚举类型,这个枚举类型有四个值:Inactive, Active, Hibernate, and Terminated。你可以使用case关键字指定枚举的值,或者你在一行使用逗号隔开多个枚举值
你可以像使用其它类型一样使用枚举类型,如上例中所示,你将State.Inactive这个枚举值赋给变量machineState
你要可以在三元条件运算符中、if语句中,switch语句中或者其他任何变量或者常量可以使用的地方使用枚举类型的值
machineState == State.Inactive? println("Machine Inactive") :
println("Machine State Unknown")
上上例中,Machine Inactive会被打印出来因为machineState的值是State.Inactive
枚举类型可以定义它自己的值类型,或者说你可以将其他类型(包括整型、字符串,浮点型等)赋给枚举类型,
为了将其他类型的值赋给枚举类型,你必须指定枚举的类型然后使用复制运算符赋值。例如,如果你想定义一个字母表的枚举并且跟踪字母的位置,你可以使用如下代码:
enum Alphabet:Int{
case A = 1
case B, C, D, E, F, G, H, I
case J, K, L, M, N, O, P, Q
case R, S, T, U, V, W, X, Y, Z
}
在上例中,你定义枚举类型Alphabet为整型。这意味着每个Alphabet的值都和一个整数相关联。你必须为每一个枚举类型的值关联一个整数值,在枚举值A你就是这么做的。因为这是整形类型,Swift会根据你列出的顺序计算出剩余的枚举类型值对应的整数值,
你可以像使用State一样使用Alphabet。对于Alphabet,你可以通过teRaw()函数得到枚举值对应的整数值
例如,如果你想将A的整数值和B的整数值相加,可以使用如下代码:
let result =Alphabet.A.toRaw() + Alphabet.B.toRaw()
toRaw()是一个函数,我们会在第27章进行讲解