枚舉介紹
- 概念介紹
- 枚舉定義了一個通用類型的一組相關的值,可以在代碼中以一個安全的方式來使用這些值
- Swift中的枚舉是一等類型, 它可以像類和結構體一樣增加
屬性和方法
- 在 C/OC 語言中枚舉指定相關名稱為一組整型值,而Swift 中的枚舉更加靈活
- 不必給每一個枚舉成員提供一個值
- Swift 中的枚舉可以提供的值類型有:字元串,字元,整型值,浮點值等
- 枚舉類型的文法
- 使用
關鍵詞并且把它們的整個定義放在一對大括号内enum
- 使用
enum SomeEnumeration {
// enumeration definition goes here
}
enum Method{
case Add
case Sub
case Mul
case Div
}
let selectMethod = Method.Sub
switch (selectMethod){
case Method.Add:
print("加法")
case Method.Sub:
print("減法")
case Method.Mul:
print("除法")
case Method.Div:
print("乘法")
default:
print("都不是")
}
枚舉的定義
- 定義方式一
-
關鍵詞表明新的一行成員值将被定義case
- 不像 C 和 Objective-C 一樣,
Swift 的枚舉成員在被建立時不會被賦予一個預設的整數值
- 下面的例子中,North,South,East和West不是隐式的等于0,1,2和3
-
enum CompassPoint {
case North
case South
case East
case West
}
- 定義方式二:多個成員值可以出現在同一行上
enum CompassPoint {
case North, South, East,West
}
枚舉指派
- 枚舉類型指派可以是字元串/字元/整型/浮點型
-
如果有給枚舉類型指派,則必須在枚舉類型後面明确說明具體的類型
-
enum CompassPoint : Int {
case North = 1
case South = 2
case East = 3
case West = 4
}
enum CompassPoint : Double {
case North = 1.0
case South = 2.0
case East = 3.0
case West = 4.0
}
enum CompassPoint : String {
case North = "North"
case South = "South"
case East = "East"
case West = "West"
}
枚舉類型推斷
- 前面的例子中,在使用枚舉的時候,是通過
的形式來通路的,其實由于Swift的類型推斷非常強大,如果枚舉類型确定了,在通路值的時候可以用枚舉.值
的形式來通路.值
enum Method {
case Add
case Sub
case Mul
case Div
func method(){
}
}
//已經明确a是一個Method類型 後面通路可以簡寫
let a:Method = .Add
let selectMethod = Method.Sub
switch (selectMethod){
case .Add:
print("加法")
case .Sub:
print("減法")
case .Mul:
print("除法")
case .Div:
print("乘法")
default:
print("都不是")
}
枚舉的原始值
- C/OC中枚舉的本質就是整數,是以C/OC中的枚舉是有原始值的,預設是從0開始,而Swift中的枚舉預設是沒有原始值的, 但是可以在定義時告訴系統讓枚舉有原始值
- 注意:
- 原始值區分大小寫
- 通過
可以擷取原始值rawValue
-
傳回的枚舉是一個可選型,因為原始值對應的枚舉值不一定存在rawValue
- 如果想指定第一個元素的原始值之後,後面的元素的原始值能夠預設+1 , 枚舉一定是 Int 類型
enum Planet:Int {
case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}
let planet:Planet = .Mars
//列印4
print(planet.rawValue)
//p是一個可選型
let p = Planet(rawValue: 3)
if let p = p {
switch p {
case .Mercury:
print("Mercury")
case .Venus:
print("Venus")
case .Earth:
print("Earth")
case .Mars:
print("Mars")
case .Jupiter:
print("Jupiter")
case .Saturn:
print("Saturn")
case .Uranus:
print("Uranus")
case .Neptune:
print("Neptune")
}
}