http://blog.csdn.net/huangchentao/article/details/32714621
枚举
1.枚举语法
用enum并把定义放在大括号内,枚举中被定义的值是枚举的成员,case关键字表示新定义的一个成员
- enum SomeEnumeration {
- // enumeration definition goes here
- }
- enum CompassPoint {
- case North
- case South
- case East
- case West
- }
- //多个成员可以出现在同一行
- enum Planet {
- case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
- }
区别于C和OC,Swift中的枚举成员创建的时候不会赋予默认的整数值,相反,不同的成员在CompassPoint的一种显式定义中拥有各自不同的值
每个枚举相当于定义了一个全新的类型,名字以大写开头,尽量使用单数形式易于理解
- var directionToHead = CompassPoint.West
- directionToHead = .East
- // directionToHead定义为CompassPoint类型后,可直接只用点操作符再为其赋枚举里面的其他值
2.匹配枚举值和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")
- }
- // prints "Watch out for penguins"
当不需要匹配全部成员时,提供一个默认的default来表示所有未被提出的成员
- let somePlanet = Planet.Earth
- switch somePlanet {
- case .Earth:
- println("Mostly harmless")
- default:
- println("Not a safe place for humans")
- }
- // prints "Mostly harmless"
3.实例值
定义条形码和二维码类型,然后使用其中一种类型创建条码
- enum Barcode {
- case UPCA(Int, Int, Int)
- case QRCode(String)
- }
- var productBarcode = Barcode.UPCA(8, 85909_51226, 3)
- //同一种类型的商品可以分配给一个不同类型的条形码
- productBarcode = .QRCode("ABCDEFGHIJKLMNOP")
- //然后可以直接使用了
- 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).")
- }
- // prints "QR code with value of ABCDEFGHIJKLMNOP."
- // 简化写法
- 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).")
- }
- // prints "QR code with value of ABCDEFGHIJKLMNOP."
4.原始值 Raw Values
以下说明一个枚举的成员如何声明他们存储不同类型的实例值。作为实例值(原始值)的替代,枚举成员可以被默认值预先填充,他们具有相同的类型
- // 枚举成员存储原始ASCII值的例子,ASCIIControlCharacter的枚举的原始值类型被定义为字符类型Character
- enum ASCIIControlCharacter: Character {
- case Tab = " "
- case LineFeed = " "
- case CarriageReturn = " "
- }
原始值可以是字符串,字符,或者任何整数类型或浮点型,每一个原始值在声明中必须是唯一的,当整型值用于原始值,如果其他枚举成员没有赋值,则会自动递增
- enum Planet: Int {
- case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
- }
- // toRaw方法可以访问枚举成员的原始值
- let earthsOrder = Planet.Earth.toRaw()
- // earthsOrder is 3
- // 使用枚举的fromRaw方法找具有特定原始值的枚举成员
- let possiblePlanet = Planet.fromRaw(7)
- // possiblePlanet is of type Planet? and equals 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)")
- }
- // prints "There isn't a planet at position 9"
版权声明:本文为博主原创文章,未经博主允许不得转载。