枚举允许用户定义一组相关联的值,然后以一个安全的方式来使用它。
定义枚举
先来定义一个简单的枚举Direction
enum Direction{
case Left
case Right
case Top
case Bottom
}
每个值都定义在一个case后面。也可以使用一个case来定义一组值,像这样
enum Direction{
case Left,Right,Top,Bottom
}
当然,也可以这样
enum Direction{
case Left,Right
case Top
case Bottom
}
以上代码都定义了一个相同的Direction枚举,包含四个值。
遍历枚举
通常情况下我们使用switch来遍历枚举
//先声明一个枚举变量
var myDirection = Direction.Right
switch myDirection{
case Direction.Left :
print("myDirection is left")
case .Right :
print("myDirection is right")
default:
print("myDirection is others")
}
需要注意的是,在swift中,switch代码段中,每一个case的后面不需要加break
,当匹配到任何一个case语句后,就执行对应的代码,然后直接跳出switch代码段。
已知类型可省略类型名
当一个枚举变量的类型已知时,我们使用枚举成员时可以省去类型名,如上面的case .Right :
,或者,给一个已知类型的枚举变量赋值时,可以这样
myDirection = .Top
尽管这样子写的话,代码更加精简,但是为了使代码保持更高的可读性,还是建议不要省去类型名。
原始值(Raw value)
我们可以为所有枚举成员指定一个某类型的值,例如
enum Direction :Int{
case Left = 1,Right,Top,Bottom
}
上面的代码为Direction枚举的原始值指定为Int类型,并且给第一个值赋值。当然,我可以分别为每一个成员指定一个原始值。如果我只指定了一个,则同一个case下的值会自动生成。上面的四个成员的值分别为:1,2,3,4
如果我使用多个case,如下:
enum Direction :Int{
case Left = 1,Right
case Top = 101,Bottom
}
则四个成员的原始值分别为:1,2,101,102
跟原始值相关的操作还有:获取枚举对象的原始值,以及根据某个原始值来生成枚举对象,看代码
myDirection = Direction.Bottom
//获取枚举对象的原始值
print(myDirection.rawValue)
//根据某个原始值来生成枚举对象
var direction2 = Direction(rawValue: 2)
if let value = direction2 {
print(value)
}
关联值(Associated value)
关联值的特性让swift的枚举更加强大。swift允许我们给枚举的所有成员指定不同类型的关联值!
假如我们要定义一个枚举Gender,男性需要提供姓名和职业,女性则需要提供姓名和年龄,则我们的枚举可以这样定义
enum Gender{
case Male(String,String)
case Female(String,Int)
}
然后声明两个Gender类型的变量,一男一女
var lilei=Gender.Male("lilei","programmer")
var hanmeimei=Gender.Female("hanmeimei",21)
func printGender(genderItem :Gender){
switch genderItem {
case .Male(let name,let profession) :
print("\(name) is a \(profession)")
case .Female(let name,let age):
print("\(name) is \(age) years old")
}
}
//调用该函数
printGender(lilei)
printGender(hanmeimei)
上面代码的输出结果为:
lilei is a programmer
hanmeimei is 21 years old
枚举的常用方法已经介绍完了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。