枚舉
本節(jié)內(nèi)容包括:
- 枚舉語法
- 匹配枚舉值與switch語句
- 相關(guān)值
- 原始值
枚舉語法
enum CompassPoint {
case North
case South
case East
case West
}
注意:
不像 C 和 Objective-C 一樣,Swift 的枚舉成員在被創(chuàng)建時不會被賦予一個默認(rèn)的整數(shù)值。在上面的CompassPoints例子中,North,South,East和West不是隱式的等于0,1,2和3。相反的,這些不同的枚舉成員在CompassPoint的一種顯示定義中擁有各自不同的值。
匹配枚舉值和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")
}
當(dāng)考慮一個枚舉的成員們時,一個switch語句必須全面。如果忽略了.West這種情況,上面那段代碼將無法通過編譯,因為它沒有考慮到CompassPoint的全部成員。全面性的要求確保了枚舉成員不會被意外遺漏。
當(dāng)不需要匹配每個枚舉成員的時候,你可以提供一個默認(rèn)default分支來涵蓋所有未明確被提出的任何成員:
let somePlanet = Planet.Earth
switch somePlanet {
case .Earth:
println("Mostly harmless")
default:
println("Not a safe place for humans")
}
相關(guān)值
你可以定義 Swift 的枚舉存儲任何類型的相關(guān)值,如果需要的話,每個成員的數(shù)據(jù)類型可以是各不相同的。枚舉的這種特性跟其他語言中的可辨識聯(lián)合(discriminated unions),標(biāo)簽聯(lián)合(tagged unions),或者變體(variants)相似。
原始值
作為相關(guān)值的替代,枚舉成員可以被默認(rèn)值(稱為原始值)預(yù)先填充,其中這些原始值具有相同的類型。
enum ASCIIControlCharacter: Character {
case Tab = "\t"
case LineFeed = "\n"
case CarriageReturn = "\r"
}
注意,原始值和相關(guān)值是不相同的。當(dāng)你開始在你的代碼中定義枚舉的時候原始值是被預(yù)先填充的值,像上述三個 ASCII 碼。對于一個特定的枚舉成員,它的原始值始終是相同的。相關(guān)值是當(dāng)你在創(chuàng)建一個基于枚舉成員的新常量或變量時才會被設(shè)置,并且每次當(dāng)你這么做得時候,它的值可以是不同的。
原始值可以是字符串,字符,或者任何整型值或浮點型值。每個原始值在它的枚舉聲明中必須是唯一的。當(dāng)整型值被用于原始值,如果其他枚舉成員沒有值時,它們會自動遞增。