標籤:
http://blog.csdn.net/huangchentao/article/details/32714621
枚舉
1.枚舉文法
用enum並把定義放在大括弧內,枚舉中被定義的值是枚舉的成員,case關鍵字表示新定義的一個成員
[objc] view plaincopy
- 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的一種顯式定義中擁有各自不同的值
每個枚舉相當於定義了一個全新的類型,名字以大寫開頭,盡量使用單數形式易於理解
[objc] view plaincopy
- var directionToHead = CompassPoint.West
- directionToHead = .East
- // directionToHead定義為CompassPoint類型後,可直接只用點操作符再為其賦枚舉裡面的其他值
2.匹配枚舉值和switch語句
[objc] view plaincopy
- 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來表示所有未被提出的成員
[objc] view plaincopy
- let somePlanet = Planet.Earth
- switch somePlanet {
- case .Earth:
- println("Mostly harmless")
- default:
- println("Not a safe place for humans")
- }
- // prints "Mostly harmless"
3.執行個體值
定義條碼和二維碼類型,然後使用其中一種類型建立條碼
[objc] view plaincopy
- 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
以下說明一個枚舉的成員如何聲明他們儲存不同類型的執行個體值。作為執行個體值(原始值)的替代,枚舉成員可以被預設值預先填充,他們具有相同的類型
[objc] view plaincopy
- // 枚舉成員儲存原始ASCII值的例子,ASCIIControlCharacter的枚舉的原始實值型別被定義為字元類型Character
- enum ASCIIControlCharacter: Character {
- case Tab = "\t"
- case LineFeed = "\n"
- case CarriageReturn = "\r"
- }
原始值可以是字串,字元,或者任何整數類型或浮點型,每一個原始值在聲明中必須是唯一的,當整型值用於原始值,如果其他枚舉成員沒有賦值,則會自動遞增
[objc] view plaincopy
- 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"
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Swift 枚舉(七)