枚舉定義了一組具有相關性的數據,是開發者可以再帶嗎中以一個安全的方式來使用這些值,以又助於提供代碼的可讀性。
在Swift中,枚舉可以分成兩種:任意類型的枚舉和指定類型的枚舉,結構如下:
//任意類型的枚舉
enum EnumTest01{
}
//指定類型的枚舉 在指定類型的枚舉中不能是空的
enum EnumTest02:String{
}
任意枚舉成員時要注意的問題:
1、在具有任意枚舉類型中,可以將其中的成員定位為不同的類型
2、在任意的類型中,可以不定義成員,從而形成一個空的枚舉類型
定義指定的枚舉成員的注意的問題:
1、在指定數據類型的枚舉類型中,如果原始類型是整型,可以不指定原始值。如果指定的類型非整型,需指定原始值。
2、在枚舉類型指定數據類型后,其中的成員也都為此數據類型,不可以定義其他類型。
3、在為成員指定原始值時,原始值必須為唯一標識的。
4、在指定數據類型的枚舉類型,必須使用case關鍵字定義成員。如果沒有定義成員的話將會報錯。
指定類型的枚舉的定義成員:
enum Enum_names:String{
case name_01 = "name_01"
case name_02 = "name_02"
case name_03 = "name_03"
case name_04 = "name_04"
}
enum Enum_age:Int{
case age1
case age2
case age3 = 20
case age4
}
在這里Enum_names:String中的成員都是必須賦值的,但是在Enum_age:Int有時候是沒有必要進行賦值的,如上面的.age1的沒有賦值起原始值為0,age2的原始值為1 如果賦值后如:age3的原始值為20 age4的原始值是21 ,總結就是在沒有賦值的情況下第一個成員為0,以后遞增1如果進行了賦值,從賦值開始后面依次遞增1。打印原值的方法如下:
print(Enum_age.age1.rawValue);
以此進行類推獲取其他成員的原始值。
當然了也可以從原始值獲取枚舉的成員值,代碼如下:
let ageEnum = Enum_age(rawValue: 20)
let nameEnum = Enum_names(rawValue: "name_01")
在任意類型的枚舉類型中,可以定義任意的成員,這些成員是沒有值的,在實例化時可以定義此成員的相關信息,這些信心稱為相關值。定義如下面代碼:
enum Barcode{
case UPCA(Int,Int,Int)
case QString(String,String,String)
}
將枚舉成員和switch語句進行匹配時,switch語句必須要和每一個枚舉成員進行匹配,不可以有遺漏,如果開發者不需要匹配每一個枚舉成員,可以提供一個默認的default分之來涵蓋所有沒有明確匹配的成員。
如:
let name:Enum_names = .name_01
//使用default
switch name {
case .name_01:
//打印原值
print(name.rawValue);
break;
default:
print("沒有找到")
}
//不使用default
let age:Enum_age = .age2
switch age {
case .age1:
print(age.rawValue)
case .age2:
print(age.rawValue)
case .age3:
print(age.rawValue)
case .age4:
print(age.rawValue)
}
//相關值的switch的匹配
let barcodeTemp = Barcode.QString("1", "2", "3")
switch barcodeTemp {
case .QString(let str,let str02,let str03):
print(str + str02 + str03)
default:
print("沒有找到")
}