swift 枚举
2016-02-25 17:56
357 查看
枚举允许用户定义一组相关联的值,然后以一个安全的方式来使用它。
每个值都定义在一个case后面。也可以使用一个case来定义一组值,像这样
当然,也可以这样
以上代码都定义了一个相同的Direction枚举,包含四个值。
需要注意的是,在swift中,switch代码段中,每一个case的后面不需要加
尽管这样子写的话,代码更加精简,但是为了使代码保持更高的可读性,还是建议不要省去类型名。
上面的代码为Direction枚举的原始值指定为Int类型,并且给第一个值赋值。当然,我可以分别为每一个成员指定一个原始值。如果我只指定了一个,则同一个case下的值会自动生成。上面的四个成员的值分别为:1,2,3,4
如果我使用多个case,如下:
则四个成员的原始值分别为:1,2,101,102
跟原始值相关的操作还有:获取枚举对象的原始值,以及根据某个原始值来生成枚举对象,看代码
假如我们要定义一个枚举Gender,男性需要提供姓名和职业,女性则需要提供姓名和年龄,则我们的枚举可以这样定义
然后声明两个Gender类型的变量,一男一女
然后我定义一个函数来打印这两个变量的信息
上面代码的输出结果为:
lilei is a programmer
hanmeimei is 21 years old
枚举的常用方法已经介绍完了。
定义枚举
先来定义一个简单的枚举Directionenum 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
枚举的常用方法已经介绍完了。
相关文章推荐
- Apple Swift学习教程
- 介绍 Fedora 上的 Swift
- 要慎用mysql的enum字段的原因
- C#编程中枚举类型的使用教程
- 枚举的用法详细总结
- PHP中Enum(枚举)用法实例详解
- c#入门之枚举和结构体使用详解(控制台接收字符串以相反的方向输出)
- 理解C#中的枚举(简明易懂)
- C#枚举中的位运算权限分配浅谈
- C++基础入门教程(四):枚举和指针
- FileShare枚举的使用小结(文件读写锁)
- Java枚举类用法实例
- c++ 尽量不要使用#define 而是用const、enum、inline替换。
- 枚举窗口句柄后关闭所有窗口示例
- mysql之set与enum的介绍
- javascript模拟枚举的简单实例
- 深入剖析JavaScript中的枚举功能
- Python中模拟enum枚举类型的5种方法分享
- Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍