枚举_Swift基础知识学习
2016-03-03 17:53
417 查看
枚举
枚举的语法,enum开头,每一行成员的定义使用case关键字开头,一行可以定义多个关键字enum CompassPoint { case North case South case East case West } enum CompassPoint { case North, South, East, West } 上例中North,South,East,West的值并不等于0,1,2,3,而是他们本身就是自己的值,且该值的类型就是CompassPoint
var directionToHead = CompassPoint.West // directionToHead是一个CompassPoint类型,可以被赋值为该类型的其他值 // 当设置directionToHead的值时,他的类型是已知的,因此可以省略East的类型 directionToHead = .East
使用switch分开枚举的值,以进行的不同的操作。switch内的case必须包含枚举的所有分支,否则编译出错。当然,列举所有枚举值不太方便时,可以使用default
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") }
枚举的元素可以是结合值(associated value),下面通过一个可以存储一维条形码(由3个整数组成)和二维条形码(由字符串组成)的枚举条形码实例来说明
enum Barcode { case UPCA(Int, Int, Int) case QRCode(String) } // 定义一个变量。该变量即可被赋值为3个整数,又可被赋值为一个字符串,但都是Barcode类型的枚举值 var productBarcode = Barcode.UPCA(8, 85909_51226, 3) productBarcode = .QRCode("ABCDEFGHIJKLMNOP") // 使用switch时,case内可区分条形码种类,可使用变量或常量获得结合值 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).") } // 打印 "QR code with value of ABCDEFGHIJKLMNOP." *在case内部,如果其类型都为let或var,则该关键字可提前到case和枚举类型中间,如: case let .UPCA(numberSystem, identifier, check):
原始值类型的枚举在枚举名后紧跟数据类型,其枚举的成员在定义时已经赋予了初始值,且不能改变,与结合值类型的枚举相比,结合值是在将枚举值赋予一个变量时,才设置了那个枚举的值。
//原始值枚举的类型紧跟枚举名后,其成员的原始值的数据类型都是这个指定的类型 enum ASCIIControlCharacter: Character { case Tab = "\t" case LineFeed = "\n" case CarriageReturn = "\r" } //Int类型的原始值枚举成员的原始值是递增的,比如Venus的值是2,Earth的值是3 enum Planet: Int { case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune } //可以通过toRaw方法获得枚举成员的原始值 let earthsOrder = Planet.Earth.toRaw() // earthsOrder 的值是 3,数据类型是Int //可以通过fromRaw方法获得原始值对应的枚举成员 let possiblePlanet = Planet.fromRaw(7) // possiblePlanet 的数据类型 Planet? 值是 Planet.Uranus //因为fromRaw的原始值可能没有对应的枚举成员,所以返回的类型是一个可选变量值 let positionToFind = 9 if let somePlanet = Planet.fromRaw(positionToFind) { switch somePlanet { case .Earth: println("Mostly harmless") default: println("Not a safe place for humans") } } else { println("There isn't a planet at position \(positionToFind)") } // 枚举定义中没有原始值为9的成员,所以打印 "There isn't a planet at position 9"
相关文章推荐
- Swift中的get和set方法
- Swift 基础学习(函数)
- 大熊的swift学习笔记(三)
- iOS开发-swift基础学习三
- iOS开发-swift基础学习二
- Swift Release模式下屏蔽NSLog()
- 基于swift语言iOS8的蓝牙连接(初步)(转帖)
- swift 创建tableView 并实现协议
- Swift 基础学习(判断语句)
- Swift 基础学习(字典)
- swift资料收集
- swift: Swift中static和class的使用
- swift 快速奔跑的兔几 本节的内容是:iOS上基于文档的应用程序
- Swift2.0(17)泛型技术
- Swift2.0(17)内存管理ARC
- Swift2.0(16)分类与协议
- Swift2.0(15)类型的补充
- Swift2.0(14)引用类型与数值类型
- Swift2.0(13)构造方法
- Swift2.0(12)继承与多态