Swift 枚舉(七)

來源:互聯網
上載者:User

標籤:

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

枚舉

1.枚舉文法

用enum並把定義放在大括弧內,枚舉中被定義的值是枚舉的成員,case關鍵字表示新定義的一個成員

[objc] view plaincopy 
  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 
  1. var directionToHead = CompassPoint.West  
  2. directionToHead = .East  
  3. // directionToHead定義為CompassPoint類型後,可直接只用點操作符再為其賦枚舉裡面的其他值  
2.匹配枚舉值和switch語句 [objc] view plaincopy 
  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 
  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 
  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 
  1. // 枚舉成員儲存原始ASCII值的例子,ASCIIControlCharacter的枚舉的原始實值型別被定義為字元類型Character  
  2. enum ASCIIControlCharacter: Character {  
  3.     case Tab = "\t"  
  4.     case LineFeed = "\n"  
  5.     case CarriageReturn = "\r"  
  6. }  

原始值可以是字串,字元,或者任何整數類型或浮點型,每一個原始值在聲明中必須是唯一的,當整型值用於原始值,如果其他枚舉成員沒有賦值,則會自動遞增

[objc] view plaincopy 
  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"  

 

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Swift 枚舉(七)

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.