枚舉語法:
使用enum關(guān)鍵詞來創(chuàng)建枚舉并且把它們的整個定義放在一對大括號內(nèi),比如:

當(dāng)然也可以這樣寫

枚舉中定義的值(如north,south,east和west)是這個枚舉的成員值(或成員)。你可以使用case關(guān)鍵字來定義一個新的枚舉成員值。
注意:與Objective-C不同,Swift的枚舉成員在被創(chuàng)建時不會被賦予一個默認(rèn)的整型值,相反這些枚舉成員本身就是完備的值,這些值的類型是已經(jīng)明確定義好的CompassPoint類型
關(guān)聯(lián)值:
在Swift中枚舉可以存儲任意類型的關(guān)聯(lián)值。如下方式定義表示兩種商品條形碼的枚舉

下面我們定義一個名為Barcode的枚舉類型

判斷這個枚舉類型的值,這次我們不僅可以使用switch語句來檢查不同的條碼類型,我們還可以提取每個關(guān)聯(lián)值做為常量let或者變量var來使用

原始值:
作為關(guān)聯(lián)值的替代選擇,枚舉成員可以被默認(rèn)值(成為原始值)預(yù)填充,但是這些原始值的類型必須是相同的。

注意:原始值和關(guān)聯(lián)值是不同的。原始值是在定義枚舉時被預(yù)先填充的值,像上述三個ASCII 碼。對于一個特定的枚舉成員,它的原始值始終不變。關(guān)聯(lián)值是創(chuàng)建一個基于枚舉成員的常量或變量時才設(shè)置的值,枚舉成員的關(guān)聯(lián)值可以變化。
原始值的隱式賦值,如下所示:


如果在定義枚舉類型的時候使用了原始值,那么將會自動獲得一個初始化方法,這個方法接收一個叫做rawValue的參數(shù),參數(shù)類型即為原始值類型,返回值則是枚舉成員或nil。你可以使用這個初始化方法來創(chuàng)建一個新的枚舉實(shí)例。


遞歸枚舉:
遞歸枚舉是一種枚舉類型,它有一個或多個枚舉成員使用該枚舉類型的實(shí)例作為關(guān)聯(lián)值。使用遞歸枚舉時,編譯器會插入一個間接層。你可以在枚舉成員前加上indirect來表示該成員可遞歸。
如下所示:

或者你也可以

應(yīng)用:
