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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Windows下使用Fiddler抓取IOS APP的https请求
Fiddler设置: 手机端设置 手机必须与电脑连接同一网段的wifi,点击wifi右边的叹号图标,进行配置; 配置WiFi代理并保存; 在手机中打开safari,在地址栏输入刚才获取到的ip地址,以及fiddler配置好的端口号(默认是8888); 证书安装完成后,需要在手机中设置信任证书,否则依然无法抓取https请求 。打开手机 设置 —> 通用 —> 关于本机 —> 证书信任设置 —> 找到fiddler证书,设为信任。 image.png
- 下一篇
Android指纹识别API讲解,一种更快更好的用户体验
Android指纹识别API讲解,一种更快更好的用户体验 我发现了一个比较怪的现象。在iPhone上使用十分普遍的指纹认证功能,在Android手机上却鲜有APP使用,我简单观察了一下,发现Android手机上基本上只有支付宝、微信和极少APP支持指纹认证功能,就连银行和金融类的应用都基本不支持,甚至很多开发者都不知道Android系统是有指纹认证的官方API的。 事实上,Android从6.0系统开始就支持指纹认证功能了,但是指纹功能还需要有硬件支持才行,而Android手机的硬件都是由各厂商生产的,手机档次也参差不齐,因此不能像iPhone那样保证所有的手机都是支持指纹认证功能的。所以,可能很多开发者就觉得,即使做了指纹认证功能,也无法兼容所有的手机,还是要配合图案解锁或密码等功能一起使用才行,那么索性就只用图案和密码好了,一劳永逸。 看似这样解释好像也合情合理,但其实受伤的是数以亿计的Android手机用户。明明有更轻松更快捷的使用方式,却因为APP不予支持,最终只能使用更加原始和笨拙的方式。在国内,绝大多数Android手机的指纹认证功能都仅仅只局限于用来解锁手机而已,很少有使...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS关闭SELinux安全模块
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7,CentOS8安装Elasticsearch6.8.6