• Swift 枚举(七)


    http://blog.csdn.net/huangchentao/article/details/32714621

    枚举

    1.枚举语法

    用enum并把定义放在大括号内,枚举中被定义的值是枚举的成员,case关键字表示新定义的一个成员

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. enum SomeEnumeration {  
    2.     // enumeration definition goes here  
    3. }  
    4. enum CompassPoint {  
    5.     case North  
    6.     case South  
    7.     case East  
    8.     case West  
    9. }  
    10. //多个成员可以出现在同一行  
    11. enum Planet {  
    12.     case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune  
    13. }  

    区别于C和OC,Swift中的枚举成员创建的时候不会赋予默认的整数值,相反,不同的成员在CompassPoint的一种显式定义中拥有各自不同的值
    每个枚举相当于定义了一个全新的类型,名字以大写开头,尽量使用单数形式易于理解

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. var directionToHead = CompassPoint.West  
    2. directionToHead = .East  
    3. // directionToHead定义为CompassPoint类型后,可直接只用点操作符再为其赋枚举里面的其他值  

    2.匹配枚举值和switch语句

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. directionToHead = .South  
    2. switch directionToHead {  
    3. case .North:  
    4.     println("Lots of planets have a north")  
    5. case .South:  
    6.     println("Watch out for penguins")  
    7. case .East:  
    8.     println("Where the sun rises")  
    9. case .West:  
    10.     println("Where the skies are blue")  
    11. }  
    12. // prints "Watch out for penguins"  

    当不需要匹配全部成员时,提供一个默认的default来表示所有未被提出的成员

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. let somePlanet = Planet.Earth  
    2. switch somePlanet {  
    3. case .Earth:  
    4.     println("Mostly harmless")  
    5. default:  
    6.     println("Not a safe place for humans")  
    7. }  
    8. // prints "Mostly harmless"  

    3.实例值

    定义条形码和二维码类型,然后使用其中一种类型创建条码

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. enum Barcode {  
    2.     case UPCA(Int, Int, Int)  
    3.     case QRCode(String)  
    4. }  
    5. var productBarcode = Barcode.UPCA(8, 85909_51226, 3)  
    6. //同一种类型的商品可以分配给一个不同类型的条形码  
    7. productBarcode = .QRCode("ABCDEFGHIJKLMNOP")  
    8. //然后可以直接使用了  
    9. switch productBarcode {  
    10. case .UPCA(let numberSystem, let identifier, let check):  
    11.     println("UPC-A with value of (numberSystem), (identifier), (check).")  
    12. case .QRCode(let productCode):  
    13.     println("QR code with value of (productCode).")  
    14. }  
    15. // prints "QR code with value of ABCDEFGHIJKLMNOP."  
    16. // 简化写法  
    17. switch productBarcode {  
    18. case let .UPCA(numberSystem, identifier, check):  
    19.     println("UPC-A with value of (numberSystem), (identifier), (check).")  
    20. case let .QRCode(productCode):  
    21.     println("QR code with value of (productCode).")  
    22. }  
    23. // prints "QR code with value of ABCDEFGHIJKLMNOP."  

    4.原始值 Raw Values

    以下说明一个枚举的成员如何声明他们存储不同类型的实例值。作为实例值(原始值)的替代,枚举成员可以被默认值预先填充,他们具有相同的类型

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. // 枚举成员存储原始ASCII值的例子,ASCIIControlCharacter的枚举的原始值类型被定义为字符类型Character  
    2. enum ASCIIControlCharacter: Character {  
    3.     case Tab = " "  
    4.     case LineFeed = " "  
    5.     case CarriageReturn = " "  
    6. }  

    原始值可以是字符串,字符,或者任何整数类型或浮点型,每一个原始值在声明中必须是唯一的,当整型值用于原始值,如果其他枚举成员没有赋值,则会自动递增

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. enum Planet: Int {  
    2.     case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune  
    3. }  
    4. // toRaw方法可以访问枚举成员的原始值  
    5. let earthsOrder = Planet.Earth.toRaw()  
    6. // earthsOrder is 3  
    7. // 使用枚举的fromRaw方法找具有特定原始值的枚举成员  
    8. let possiblePlanet = Planet.fromRaw(7)  
    9. // possiblePlanet is of type Planet? and equals Planet.Uranus  
    10. fromRaw方法可以返回一个可选的枚举成员  
    11. let positionToFind = 9  
    12. if let somePlanet = Planet.fromRaw(positionToFind) {  
    13.     switch somePlanet {  
    14.     case .Earth:  
    15.         println("Mostly harmless")  
    16.     default:  
    17.         println("Not a safe place for humans")  
    18.     }  
    19. else {  
    20.     println("There isn't a planet at position (positionToFind)")  
    21. }  
    22. // prints "There isn't a planet at position 9"  

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    linux中编译C语言程序
    plsql 基础教程(二)
    plsql 基础教程(一)
    plsql开发笔记和小结
    表的约束
    一道面试题:说说进程和线程的区别
    HashTable实现原理
    HashMap、Hashtable、HashSet三种hash集合的区别
    Eclipse快捷键大全
    Statement、 PreparedStatement 、CallableStatement 区别和联系
  • 原文地址:https://www.cnblogs.com/xuejinhui/p/4618105.html
Copyright © 2020-2023  润新知