枚舉

枚舉

本節(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)整型值被用于原始值,如果其他枚舉成員沒有值時,它們會自動遞增。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本章將會介紹 閉包表達(dá)式尾隨閉包值捕獲閉包是引用類型逃逸閉包自動閉包枚舉語法使用Switch語句匹配枚舉值關(guān)聯(lián)值原...
    寒橋閱讀 1,629評論 0 3
  • 枚舉為一組相關(guān)的值定義了一個共同的類型,使你可以在你的代碼中以類型安全的方式來使用這些值。 如果你熟悉 C 語言,...
    雨影閱讀 436評論 0 0
  • 枚舉為一組相關(guān)的值定義了一個共同的類型,使得可以在代碼中以類型安全的方式來使用這些值。 如果熟悉 C 語言,會知道...
    窮人家的孩紙閱讀 901評論 1 4
  • 枚舉語法 enum CompassPoint { case north case south case east ...
    Taureau_2d81閱讀 598評論 0 0
  • 人有些時候總得克制住自己的欲望,對不對?因為克制,因為更好的規(guī)劃,我們才更加強(qiáng)大!不是嗎?所以,冷靜下來!你可以暫...
    Bubba松閱讀 344評論 0 0

友情鏈接更多精彩內(nèi)容