微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift 枚举(七)

枚举

1.枚举语法

用enum并把定义放在大括号内,枚举中被定义的值是枚举的成员,case关键字表示新定义的一个成员
[objc] view plain copy
  1. enumSomeEnumeration{
  2. //enumerationdeFinitiongoeshere
  3. }
  4. enumCompasspoint{
  5. casenorth
  6. caseSouth
  7. caseEast
  8. caseWest
  9. //多个成员可以出现在同一行
  10. enumPlanet{
  11. caseMercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune
  12. }
区别于C和OC,Swift中的枚举成员创建的时候不会赋予认的整数值,相反,不同的成员在Compasspoint的一种显式定义中拥有各自不同的值
每个枚举相当于定义了一个全新的类型,名字以大写开头,尽量使用单数形式易于理解
    vardirectionToHead=Compasspoint.West
  1. directionToHead=.East
  2. //directionToHead定义为Compasspoint类型后,可直接只用点操作符再为其赋枚举里面的其他值

2.匹配枚举值和switch语句

    directionToHead=.south
  1. switchdirectionToHead{
  2. case.north:
  3. println("Lotsofplanetshaveanorth")
  4. case.south:
  5. println("Watchoutforpenguins")
  6. case.East:
  7. println("Wherethesunrises")
  8. case.West:
  9. println("Wheretheskiesareblue")
  10. //prints"Watchoutforpenguins"
当不需要匹配全部成员时,提供一个认的default来表示所有未被提出的成员
    letsomePlanet=Planet.Earth
  1. switchsomePlanet{
  2. case.Earth:
  3. println("Mostlyharmless")
  4. default:
  5. println("Notasafeplaceforhumans")
  6. //prints"Mostlyharmless"

3.实例值

定义条形码和二维码类型,然后使用其中一种类型创建条码
    enumBarcode{
  1. caseUPCA(Int,Int,Int)
  2. caseQRCode(String)
  3. }
  4. varproductBarcode=Barcode.UPCA(8,85909_51226,3)
  5. //同一种类型的商品可以分配给一个不同类型的条形码
  6. productBarcode=.QRCode("ABCDEFGHIJKLMnop")
  7. //然后可以直接使用了
  8. switchproductBarcode{
  9. case.UPCA(letnumberSystem,letidentifier,letcheck):
  10. println("UPC-Awithvalueof\(numberSystem),\(identifier),\(check).")
  11. case.QRCode(letproductCode):
  12. println("QRcodewithvalueof\(productCode).")
  13. //prints"QRcodewithvalueofABCDEFGHIJKLMnop."
  14. //简化写法
  15. caselet.UPCA(numberSystem,identifier,check):
  16. caselet.QRCode(productCode):
  17. //prints"QRcodewithvalueofABCDEFGHIJKLMnop."

4.原始值 Raw Values

以下说明一个枚举的成员如何声明他们存储不同类型的实例值。作为实例值(原始值)的替代,枚举成员可以被默认值预先填充,他们具有相同的类型
    //枚举成员存储原始ASCII值的例子,ASCIIControlCharacter的枚举的原始值类型被定义为字符类型Character
  1. enumASCIIControlCharacter:Character{
  2. caseTab="\t"
  3. caseLineFeed="\n"
  4. caseCarriageReturn="\r"
  5. }
原始值可以是字符串,字符,或者任何整数类型或浮点型,每一个原始值在声明中必须是唯一的,当整型值用于原始值,如果其他枚举成员没有赋值,则会自动递增
    Planet:Int{
  1. caseMercury=1,0); background-color:inherit">//toRaw方法可以访问枚举成员的原始值
  2. letearthsOrder=Planet.Earth.toRaw()
  3. //earthsOrderis3
  4. //使用枚举的fromraw方法找具有特定原始值的枚举成员
  5. letpossiblePlanet=Planet.fromraw(7)
  6. //possiblePlanetisoftypePlanet?andequalsPlanet.Uranus
  7. fromraw方法可以返回一个可选的枚举成员
  8. letpositionToFind=9
  9. ifletsomePlanet=Planet.fromraw(positionToFind){
  10. switchsomePlanet{
  11. case.Earth:
  12. println("Mostlyharmless")
  13. default:
  14. println("Notasafeplaceforhumans")
  15. }else{
  16. println("Thereisn'taplanetatposition\(positionToFind)")
  17. //prints"Thereisn'taplanetatposition9"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐