枚舉:定義可能值列表的自定義類型模型。是一種數據類型,只不過是這種數據類型只包含自定義的特定數據,它是一組有共同特性的數據的集合。
Swift的枚舉類似于 Objective C 和 C 的結構,枚舉的功能為:
1.它聲明在類里,通過實例化類來訪問它的值。
2.也可以定義構造函數來提供一個初始成員值,可以在原始的實現基礎上擴展它們的功能。
3.可以遵守協議來提供標準的功能。
不過Swift中的枚舉要靈活得多,不必為枚舉的每個情況提供值。如果為每個枚舉情況提供了值(稱為原始值),則該值可以是字符串、字符或任何整數或浮點類型的值。
枚舉語法
以上枚舉中定義的值(如north、south、east和west)是其枚舉情況。您使用case關鍵字引入一行新的枚舉案例。
與C和Objective-C等語言不同,Swift枚舉案例默認沒有整數值設置。在上面的Compass示例中,north、south、east和west并不隱含地等于0、1、2和3。相反,不同的枚舉情況本身就是值,具有明確定義的Compass類型。
var directionToHead = CompassPoint.west
directionToHead的類型可以在它被CompassPoint的一個可能值初始化時推斷出來。一旦directionToHead被聲明為一個CompassPoint,你可以使用一個縮寫語法(.)將其設置為另一個CompassPoint的值:
directionToHead = .east
當directionToHead的類型已知時,再次為其賦值可以省略枚舉名。使用顯式類型的枚舉值可以讓代碼具有更好的可讀性。
單行上也可以出現多個情況,用逗號分隔:
獲取所有枚舉的案例:
通過在枚舉名稱后寫入: CaseIterable來啟用此功能,Swift將所有案例的集合公開為枚舉類型的allCases屬性里。
枚舉分為相關值和原始值
相關值:枚舉成員可以是不同數據類型的;值的創建基于常量或者變量;相關值是當你在創建一個基于枚舉成員的新常量或變量時才會被設置,并且每次當你這么做得時候,它的值可以是不同的。
原始值:枚舉成員是相同數據類型的;預先填充的值;原始值始終是相同的。
原始值可以是字符串,字符,或者任何整型值或浮點型值。每個原始值在它的枚舉聲明中必須是唯一的。
在原始值為整數的枚舉時,不需要顯式的為每一個成員賦值,Swift會自動為你賦值。