一、 枚举 枚举定义了一种包含一组相关值的公共类型。枚举是Swift中的一种与类类似的类型,具有许多传统类才有的特征,例如计算属性、实例方法,能够通过扩展或协议增强功能等。 1.1 枚举定义 Swift 语言的枚举类型的定义语法如下: enum CompassPoint { case North case South case East case West } 枚举语法以一个关键字enum来标识,enum后面包含一个枚举类型名字,枚举定义全部放到一对大括号中。 在枚举中定义的值称为枚举成员值,用case关键字来指示一个新的枚举成员值。 与C和Objective-C语言的枚举类型不同的是:在Swift中不需要为枚举成员分配一个默认的整数值。 如果为枚举成员提供值,该值可以是一个字符串、一个字符或者是一个任意整数或浮点数。 枚举成员值可以定义到一行中,并用逗号分割。 enum Planet { case Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune } 每个新定义的枚举都属于一种新的独立的类型。 1.2 枚举的使用 可以为一个常量或变量分配一种枚举类型的值,如: var directionToHead =CompassPoint.West 以上定义的变量directionToHead可以推断为是一种CompassPoint类型的枚举变量,因此你可以设置该变量为CompassPoint类型的其它值,如: directionToHead = .East //枚举类型被省略
枚举也能够在switch语句中使用,用来匹配独立的枚举值: directionToHead = .South switch directionToHead { case .North: println("Lots of planets have a north") case .South: println("Watch out for penguins") case .East: println("Where the sun rises") case .West: println("Where the skies are blue") } 1.3 为枚举成员分配相关值 Swift中能够为每一个枚举成员规定一个任意类型的相关值,并且为每个枚举成员规定的相关值的类型可以不同。 enum Barcode { case UPCA(Int,Int,Int) case QRCode(String) } 该例子定义了一个类型为Barcode的枚举类型,并定义了两个枚举值UPCA 和QRCode,并可以为枚举值UPCA分配一个多元组类型的相关值,为QRCode分配一个字符串类型的相关值,该例子没有为枚举值本身指定任何类型的值。 可以使用以上定义的枚举为一个常量或变量赋值,如: var productBarcode =Barcode.UPCA(8,85909_51226,3) 该例子为变量 productBarcode分配了一个Barcode.UPCA枚举值,为其分配的相关的多元组类型的值为(8,85909_51226,3)。 然后该变量productBarcode可以设置为带字符串类型相关值的另外的一个枚举值: productBarcode = .QRCode(“ABCDEFGHIJKLMNOP”) 还可以在switch语句中使用该枚举,并通过绑定常量或变量的方式引出其带有的相关类型的值: switch productBarcode { case .UPCA(let numberSystem,let identifier,let check): println("UPC-A with value of\(numberSystem),\(identifier),\(check).") case .QRCode(let productCode): println("QR code with value of\(productCode).") } 如果枚举成员的所有的相关值都作为常量被引出,或者所有的相关值都作为变量形式被引出,以上语法还可以简写为如下形式: switch productBarcode { case let .UPCA(numberSystem,identifier,check): println("UPC-A with value of\(numberSystem),\(identifier),\(check).") case let .QRCode(productCode): println("QR code with value of\(productCode).") } 1.4 为枚举分配原始值 除了为枚举成员分配相关的值外,还能为每个枚举成员预分配一个同类型的原始值。这与C 语言为枚举成员分配一个整数值类似,但Swift定义的原始值的类型可以是字符串、字符、或任意的整数或浮点数类型等,如: enum ASCIIControlCharacter:Character { case Tab ="\t" case LineFeed ="\n" case CarriageReturn ="\r" }