列舉是使用者定義的資料型別,由一組相關值組成。 關鍵字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
將被分配給該特定類的後續列舉成員。 當定義了列舉成員資料型別,就可以通過傳遞值和進一步計算來存取成員。
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.