位置:首頁 > 高級語言 > Swift教學 > Swift枚舉聲明

Swift枚舉聲明

枚舉聲明

在你的程序裡使用枚舉聲明來引入一個枚舉類型。

枚舉聲明有兩種基本的形式,使用關鍵字enum來聲明。枚舉聲明體使用從零開始的變量——叫做枚舉事件,和任意數量的 聲明,包括計算型屬性,實例方法,靜態方法,構造器,類型彆名,甚至其他枚舉,結構體,和類。枚舉聲明不能 包含析構器或者協議聲明。

不像類或者結構體。枚舉類型並不提供隱式的初始構造器,所有構造器必須顯式的聲明。構造器可以委托枚舉中的其他 構造器,但是構造過程僅當構造器將一個枚舉時間完成後才全部完成。

和結構體類似但是和類不同,枚舉是值類型:枚舉實例在賦予變量或常量時,或者被函數調用時被複製。 更多關於值類型的信息,參見結構體和枚舉都是值類型(Structures and Enumerations Are Value Types)一節。

你可以擴展枚舉類型,正如在擴展名聲明(Extension Declaration)中討論的一樣。

任意事件類型的枚舉

如下的形式聲明了一個包含任意類型枚舉時間的枚舉變量

enum enumeration name {
case enumeration case 1
case enumeration case 2(associated value types)
}

這種形式的枚舉聲明在其他語言中有時被叫做可識彆聯合(discrinminated)。

這種形式中,每一個事件塊由關鍵字case開始,後麵緊接著一個或多個以逗號分隔的枚舉事件。每一個事件名必須是 獨一無二的。每一個事件也可以指定它所存儲的指定類型的值,這些類型在關聯值類型的元祖裡被指定,立即書寫在事件 名後。獲得更多關於關聯值類型的信息和例子,請查看關聯值(associated values)一節。

使用原始事件值的枚舉

以下的形式聲明了一個包含相同基礎類型的枚舉事件的枚舉:


enum enumeration nameraw value type {
case enumeration case 1 = raw value 1
case enumeration case 2 = raw value 2
}
 

在這種形式中,每一個事件塊由case關鍵字開始,後麵緊接著一個或多個以逗號分隔的枚舉事件。和第一種形式的枚舉 事件不同,這種形式的枚舉事件包含一個同類型的基礎值,叫做原始值(raw value)。這些值的類型在原始值類型(raw value type) 中被指定,必須是字麵上的整數,浮點數,字符或者字符串。

每一個事件必須有唯一的名字,必須有一個唯一的初始值。如果初始值類型被指定為int,則不必為事件顯式的指定值, 它們會隱式的被標為值0,1,2等。每一個冇有被賦值的Int類型時間會隱式的賦予一個初始值,它們是自動遞增的。

num ExampleEnum: Int {
    case A, B, C = 5, D
}

在上麵的例子中,ExampleEnum.A的值是0,ExampleEnum.B的值是。因為ExampleEnum.C的值被顯式的設定為5,因此 ExampleEnum.D的值會自動增長為6.

枚舉事件的初始值可以調用方法roRaw獲得,如ExampleEnum.B.toRaw()。你也可以通過調用fromRaw方法來使用初始值找到 其對應的事件,並返回一個可選的事件。查看更多信息和獲取初始值類型事件的信息,參閱初始值(raw values)。

獲得枚舉事件

使用點(.)來引用枚舉類型的事件,如 EnumerationType.EnumerationCase。當枚舉類型可以上下文推斷出時,你可以 省略它(.仍然需要),參照枚舉語法(Enumeration Syntax)和顯式成員表達(Implicit Member Expression).

使用switch語句來檢驗枚舉事件的值,正如使用switch語句匹配枚舉值(Matching Enumeration Values with a Switch Statement)一節描述的那樣。

枚舉類型是模式匹配(pattern-matched)的,和其相反的是switch語句case塊中枚舉事件匹配,在枚舉事件類型(Enumeration Case Pattern)中有描述。


枚舉聲明語法
枚舉聲明 → 特性(Attributes)列表 可選 聯合式枚舉 | 特性(Attributes)列表 可選 原始值式枚舉
聯合式枚舉 → 枚舉名 泛型參數子句 可選 { union-style-enum-members 可選 }
union-style-enum-members → union-style-enum-member union-style-enum-members 可選
union-style-enum-member → 聲明 | 聯合式(Union Style)的枚舉case子句
聯合式(Union Style)的枚舉case子句 → 特性(Attributes)列表 可選 case 聯合式(Union Style)的枚舉case列表
聯合式(Union Style)的枚舉case列表 → 聯合式(Union Style)的case | 聯合式(Union Style)的case , 聯合式(Union Style)的枚舉case列表
聯合式(Union Style)的case → 枚舉的case名 元組類型 可選
枚舉名 → 標識符
枚舉的case名 → 標識符
原始值式枚舉 → 枚舉名 泛型參數子句 可選 : 類型標識 { 原始值式枚舉成員列表 可選 }
原始值式枚舉成員列表 → 原始值式枚舉成員 原始值式枚舉成員列表 可選
原始值式枚舉成員 → 聲明 | 原始值式枚舉case子句
原始值式枚舉case子句 → 特性(Attributes)列表 可選 case 原始值式枚舉case列表
原始值式枚舉case列表 → 原始值式枚舉case | 原始值式枚舉case , 原始值式枚舉case列表
原始值式枚舉case → 枚舉的case名 原始值賦值 可選
原始值賦值 → = 字麵量