枚举介绍
- 概念介绍
- 枚举定义了一个通用类型的一组相关的值,可以在代码中以一个安全的方式来使用这些值
- 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")
}
}