Swift枚舉聲明
枚舉聲明
在你的程序裏使用枚舉聲明來引入一個枚舉類型。
枚舉聲明有兩種基本的形式,使用關鍵字enum來聲明。枚舉聲明體使用從零開始的變量——叫做枚舉事件,和任意數量的 聲明,包括計算型屬性,實例方法,靜態方法,構造器,類型別名,甚至其他枚舉,結構體,和類。枚舉聲明不能 包含析構器或者協議聲明。
不像類或者結構體。枚舉類型並不提供隱式的初始構造器,所有構造器必須顯式的聲明。構造器可以委託枚舉中的其他 構造器,但是構造過程僅當構造器將一個枚舉時間完成後才全部完成。
和結構體類似但是和類不同,枚舉是值類型:枚舉實例在賦予變量或常量時,或者被函數調用時被複制。 更多關於值類型的信息,參見結構體和枚舉都是值類型(Structures and Enumerations Are Value Types)一節。
你可以擴展枚舉類型,正如在擴展名聲明(Extension Declaration)中討論的一樣。
任意事件類型的枚舉
如下的形式聲明瞭一個包含任意類型枚舉時間的枚舉變量
enum
enumeration name
{
caseenumeration case 1
caseenumeration case 2
(associated value types
)
}
這種形式的枚舉聲明在其他語言中有時被叫做可識別聯合(discrinminated)。
這種形式中,每一個事件塊由關鍵字case開始,後面緊接着一個或多個以逗號分隔的枚舉事件。每一個事件名必須是 獨一無二的。每一個事件也可以指定它所存儲的指定類型的值,這些類型在關聯值類型的元祖裏被指定,立即書寫在事件 名後。獲得更多關於關聯值類型的信息和例子,請查看關聯值(associated values)一節。
使用原始事件值的枚舉
以下的形式聲明瞭一個包含相同基礎類型的枚舉事件的枚舉:
enum
enumeration name
:raw value type
{
caseenumeration case 1
=raw value 1
caseenumeration 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名 原始值賦值 可選
原始值賦值 → = 字面量