Tags: Swift 学习笔记
发布时间:2015-07-13
修改时间:2015-07-13
作者:Erwin
博客地址:技术杂货铺
欢迎转载,转载请注明出处。
Swift学习笔记系列——(7)枚举
枚举
Swift的枚举更像是类。
和C语言中的枚举不同点:
不必给每个枚举成员都提供值;
可以给枚举成员提供原始值,但要求类型相同;
枚举成员的原始值可以是字符串、字符、整型或浮点型;
枚举成员可以定义为联合数值,可以理解为一个元组;
枚举成员可以是不同的联合数值;
枚举有类的特性,可以有计算属性、实例方法、构造函数,可以扩展功能和实现协议;
枚举语法
用case定义枚举成员;
多个枚举成员可以写在一个case后面,用逗号分隔开来;
首字母大写;
已知枚举类型,赋值时可以省去枚举名称;
联合数值
使用联合数值,如同定义了枚举成员的类型;
联合数值可以理解为元组;
使用了联合数值的枚举,在比较时,其实比较的是联合数值的类型;
联合数值只有在创建了该枚举的常量或者变量后才会有值;
原始值
枚举成员的原始值类型要保持一致;
原始值在枚举定义的时候就有值了;
原始值要保持唯一性;
整数做原始值,没有给出的成员会用递增数字作原始值;
根据原始值的构造函数
定义时提供了原始值的枚举类型,可以用原始值初始化枚举成员,但是这个构造方法是可以失败的。用定义中不存在的原始值作参数,就会得到nil。
在switch语句匹配枚举
枚举类型已知,case语句中可以省去枚举类型;
switch必须涵盖全部分支,没有必要时,用default语句;
case语句中可以定义常量或者变量对应联合数值的项,供解析联合数值
switch productBarcode { case .UPCA(let numberSystem,let manufacturer,let product,let check): println("UPC-A: \(numberSystem),\(manufacturer),\(product),\(check).") case .QRCode(let productCode): println("QR code: \(productCode).") } // prints "QR code: ABCDEFGHIJKLMNOP."
case语句中定义定义常量或者变量对应联合数值,供解析联合数值,更简洁
switch productBarcode { case let .UPCA(numberSystem,manufacturer,product,check): println("UPC-A: \(numberSystem),\(check).") case let .QRCode(productCode): println("QR code: \(productCode).") } // prints "QR code: ABCDEFGHIJKLMNOP."