您的位置:首页 > 移动开发 > Swift

swift 枚举

2016-02-25 17:56 357 查看
枚举允许用户定义一组相关联的值,然后以一个安全的方式来使用它。

定义枚举

先来定义一个简单的枚举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

枚举的常用方法已经介绍完了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息