枚舉是用戶定義的數據類型,由一組相關值組成。 關鍵字enum
用於定義枚舉數據類型。
枚舉功能
Swift 4中的枚舉也類似於C語言和Objective C的結構。
- 它在類中聲明,並且通過該類的實例訪問其值。
- 使用枚舉初始化器定義初始成員值。
- 通過確保標準協議功能,還可以擴展其功能。
語法
使用enum
關鍵字引入枚舉,並將其整個定義放在一對括弧中 -
enum enumname {
// enumeration values are described here
}
例如,可以按如下方式定義星期幾的枚舉 -
enum DaysofaWeek {
case Sunday
case Monday
---
case Saturday
}
示例代碼
enum names {
case Swift
case Closures
}
var lang = names.Closures
lang = .Closures
switch lang {
case .Swift:
print("Welcome to Swift")
case .Closures:
print("Welcome to Closures")
default:
print("Introduction")
}
當使用playground運行上述程式時,得到以下結果 -
Welcome to Closures
Swift 4枚舉不會像C語言和Objective C那樣為其成員分配默認值。它的成員由枚舉名稱顯式定義。 枚舉名稱應以大寫字母開頭(例如:enum DaysofaWeek
)。
var weekDay = DaysofaWeek.Sunday
這裏枚舉名稱DaysofaWeek
分配給變數weekday.Sunday
。 它通知編譯器數據類型屬於Sunday
將被分配給該特定類的後續枚舉成員。 當定義了枚舉成員數據類型,就可以通過傳遞值和進一步計算來訪問成員。
使用Switch語句進行枚舉
Swift 4的’switch’語句也遵循多路選擇。 根據指定的條件,在特定時間僅訪問一個變數。 switch
語句中的默認情況用於捕獲未指定的情況。示例代碼 -
enum Climate {
case India
case America
case Africa
case Australia
}
var season = Climate.America
season = .America
switch season {
case .China:
print("Climate is Hot")
case .America:
print("Climate is Cold")
case .Africa:
print("Climate is Moderate")
case .Australia:
print("Climate is Rainy")
}
當使用playground運行上述程式時,得到以下結果 -
Climate is Cold
上面程式首先將Climate
定義為枚舉名稱。 然後,它的成員如:China
,America
,Africa
和Australia
,聲明屬於Climate
類。 現在,America
成員被分配到season
變數。 此外,Switch case
將比較.America
相對應的值,它將分支到該特定語句。 輸出將顯示為Climate is Cold
。 同樣,可以通過switch
語句訪問所有成員。 當條件不滿足時,默認列印Climate is not predictable
。
枚舉可以進一步分類為關聯值和原始值。
關聯值與原始值的區別
關聯值 | 原始值 |
---|---|
不同的數據類型 | 相同的數據類型 |
例如:enum {10,0.8,"Hello"} |
例如:enum {1, 20, 99, 1999} |
值基於常量或變數創建 | 預先填充的值 |
每次聲明時都會變化 | 成員值相同 |
具有相關值的枚舉
enum Student {
case Name(String)
case Mark(Int,Int,Int)
}
var studDetails = Student.Name("Swift 4")
var studMarks = Student.Mark(98,97,95)
switch studMarks {
case .Name(let studName):
print("Student name is: \(studName).")
case .Mark(let Mark1, let Mark2, let Mark3):
print("Student Marks are: \(Mark1),\(Mark2),\(Mark3).")
}
當使用playground運行上述程式時,得到以下結果 -
Student Marks are: 98,97,95.
例如,考慮訪問三個科目的學生姓名和分數,枚舉名稱聲明為Student
,枚舉類中的成員Name
是屬於字串數據類型,Mark
表示為整數類型的:mark1
,mark2
和mark3
。 訪問學生姓名或分數代碼如下 -
var studDetails = Student.Name("Swift")
var studMarks = Student.Mark(98,97,95)
現在,如果執行代碼塊,則switch case
將列印學生姓名和分數。 否則如果兩個條件都失敗,則將執行默認塊。
具有原始值的枚舉
原始值可以是字串,字元或任何整數或浮點數類型。 每個原始值在其枚舉聲明中必須是唯一的。 當整數用於原始值時,如果沒有為某些枚舉成員指定值,則它們會自動遞增。參考以下示例代碼 -
enum Month: Int {
case January = 1, February, March, April, May, June, July, August,
September, October, November, December
}
let yearMonth = Month.May.rawValue
print("Value of the Month is: \(yearMonth).")
當使用playground運行上述程式時,得到以下結果 -
Value of the Month is: 5.