enum CompassPoint {
case North
case South
case East
case West
}
與C和Objective-C不同,Swift的枚舉成員在被創(chuàng)建時(shí)不會(huì)被 賦予一個(gè)默認(rèn)的整形值。在上面的CompassPoint例子中舍败,North,South,East,West不會(huì)被隱式地賦值0嗤瞎,1虱黄,2和3.相反,這些枚舉成員本身就是完備的值活合,這些值得類(lèi)型是已經(jīng)明確定義好的CompassPoint類(lèi)型。
多個(gè)成員值可以出現(xiàn)在同一行上,用逗號(hào)隔開(kāi):
enum Planet {
case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}
每個(gè)枚舉定義了一個(gè)全新的類(lèi)型。像 Swift 中其他類(lèi)型一樣,它們的名字(例如 CompassPoint 和 Planet )必須 以一個(gè)大寫(xiě)字母開(kāi)頭器予。給枚舉類(lèi)型起一個(gè)單數(shù)名字而不是復(fù)數(shù)名字,以便于讀起來(lái)更加容易理解
關(guān)聯(lián)值
枚舉原始值
作為關(guān)聯(lián)值的替代選擇,枚舉成員可以被默認(rèn)值(稱(chēng)為原始值)預(yù)填充豪直,這些原始值得類(lèi)型必須相同劣摇。
enum ASCIIControlCharacter: Character {
case Tab = "\t"
case LineFeed = "\n"
case CarriageReturn = "\r"
}
原始值可以是字符喘,字符弓乙,或者任意整形或者浮點(diǎn)型值末融。每個(gè)原始值在枚舉聲明中必須是唯一的钧惧。
注意
原始值和關(guān)聯(lián)值是不同的。原始值是在定義枚舉時(shí)被預(yù)先填充的值勾习。像上述三個(gè)ASCII碼浓瞪。對(duì)于一個(gè)特定的枚舉成員,它的原始值始終不變巧婶。關(guān)聯(lián)值是創(chuàng)建一個(gè)基于枚舉成員的常量或者變量時(shí)才設(shè)置的值乾颁,枚舉成員的關(guān)聯(lián)值可以變化。
原始值得隱式賦值
在使用原始值為整數(shù)或者字符串類(lèi)型的枚舉時(shí),不需要顯式地為每一個(gè)枚舉成員設(shè)置原始值,Swift 將會(huì)自動(dòng)為 你賦值艺栈。
例如,當(dāng)使用整數(shù)作為原始值時(shí),隱式賦值的值依次遞增 1 英岭。如果第一個(gè)枚舉成員沒(méi)有設(shè)置原始值,其原始值將 為0。
當(dāng)使用字符串作為枚舉類(lèi)型的原始值時(shí),每個(gè)枚舉成員的隱式原始值為該枚舉成員的名稱(chēng)湿右。
enum Planet: Int {
case Mercury , Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}
使用原始值初始化枚舉實(shí)例
如果在定義枚舉類(lèi)型額時(shí)候使用了原始值诅妹,那么將會(huì)自動(dòng)獲得一個(gè)初始化方法,這個(gè)方法接收一個(gè)叫做rawValue的參數(shù)毅人,參數(shù)類(lèi)型即為原始值類(lèi)型吭狡,返回值則是枚舉成員或nil。你可以使用這個(gè)初始化方法來(lái)創(chuàng)建一個(gè)新的枚舉實(shí)例丈莺。
Planet(rawValue: 55)
原始值構(gòu)造器是一個(gè)可失敗構(gòu)造器划煮,因?yàn)椴⒉皇敲恳粋€(gè)原始值都有與之對(duì)應(yīng)的枚舉成員。