学习Swift--枚举的初步认识 --个人备忘 大神勿喷
枚举定义了一个通用类型的一组相关值,使你可以在你的代码中以一种安全的方式来使用这些值。
// 定义枚举的语法
enum Chips { // 定义了薯片的枚举,包含了3种口味的成员
case Tomato
case Original
case Barbecue
}
每个枚举定义了一个全新的类型。像 Swift 中其他类型一样,它们的名字必须以一个大写字母开头。给枚举类型起一个单数名字而不是复数名字,以便于读起来更加容易理解.
一般匹配枚举值都是用switch
var chip = Chips.Original
// 匹配枚举值
switch chip {
case .Tomato :
print("tomato")
case .Original :
print("original")
case .Barbecue :
print("barbecue")
}
上面的例子演示了枚举的基本语法,下面来记录一下为成员值赋予一个任何属性的相关值,一起储存起来的话一些特别情况会更便利些
// <假如>自定义了一个控件需要传控件的显示形式(如button的custom)
enum ViewType {
case Normal(String) // 比如说需要传进一个要显示的字符串
case Contains(Double, Double) // 比如说需要传进显示比例
} var viewType = ViewType.Normal("传入了需要显示的字符串(赋予了相关值)") switch viewType {
case .Normal(var str) :
print("设置控件需要显示的字符串");
case let .Contains(widthScale, hightScale) :
print("设置控件的宽高缩放比例");
}
作为相关值的另一种选择,枚举成员可以被默认值(称为原始值)赋值,其中这些原始值具有相同的类型。
enum Month : Int { // 因为原始值类型必须一致 所以将原始值定义为Int 注意:原始值和相关值不能同时使用
case January // 如果没有给定原始值 会隐式将第一个成员赋值为0,随后的每一个成员递增1
case February
case March
case April
}
var february = Month.February
print(february, february.rawValue) // 输出:"February 1\n"
enum Month : Int { // 也可以将所有成员值缩减到1行 与之前的效果是一样的
case January = 1, February, March, April
}
var february = Month.February
print(february, february.rawValue) // 输出:"February 2\n"
注:如果初始值为Float或Double的话也会默认递增1
enum Month : String { // 如果是字符串类型的初始值、并且没有显式的赋值,那么就将成员名字设置为初始值
case January = "1月", February, March, April
}
var january = Month.January
print(january, january.rawValue) // 输出:"January 1月\n"
var march = Month.March
print(march, march.rawValue) // 输出:"March March\n"
下面来记一下通过原始值来构造枚举
enum ViewContentType : Int { // 模拟一个视图的内容模式
case Normal = 0, System, Custom, Ancient
}
// 根据原始值构造一个枚举
if let type = ViewContentType(rawValue: 2){ // 注意 原始值构造器是可失败构造器(可能会返回nil)所以返回的是可选类型,需要使用可选绑定
switch type {
case .Normal:
// do something...
print(type)
case .System:
// do something...
print(type)
default:
// do sonthing...
print(type) // 最后输出这一句
}
}
下面来记录下相比较OC中的枚举 Swift枚举的新特性:Swift中 枚举可以定义类型属性和实例属性
// <假如>自定义了一个控件需要传控件的显示形式(如button的custom)
enum ViewType { // 我们拿这个枚举举例 假如说声明一个实例属性可以返回相对应成员值的size 注意 viewSize是只读的计算属性
var viewSize : CGSize {
switch self {
// 参数暂时省略
// 可以根据不同的成员返回相对应的size
case .Normal(_) : return CGSize(width: 100, height: 20)
case .Contains(_, _) : return CGSize(width: 390, height: 300)
}
} // 声明类型属性
static let comment = "这个枚举有两个成员,设置不同的值来改变控件的摆布状态" case Normal(String) // 比如说需要传进一个要显示的字符串
case Contains(Double, Double) // 比如说需要传进显示比例
} let type = ViewType.Normal("一个字符串")
// 调用实例计算属性 获得size
let viewSize = type.viewSize // 调用类型计算属性
print(ViewType.comment)
枚举还可以声明方法
enum Month : Int { // 因为原始值类型必须一致 所以将原始值定义为Int 注意:原始值和相关值不能同时使用
// 枚举可以声明方法 就跟类的写法一样 不过要是修改自身的值就需要加一个关键字
mutating func nextMonth() -> String {
switch self {
case January :
self = February
return "已经到2月拉"
case .February :
self = March
return "已经到3月拉"
default : return "以此类推"
}
}
case January // 如果没有给定原始值 会隐式将第一个成员赋值为0,随后的每一个成员递增1
case February
case March
case April
}
var month = Month(rawValue: 0) // january
let string = month?.nextMonth() // 返回一个字符串 并且把成员值改为February
print(month) // 打印出 "Optional(Month.February)\n"
学习Swift--枚举的初步认识 --个人备忘 大神勿喷的更多相关文章
- 工作效率-十五分钟让你快速学习Markdown语法到精通排版实践备忘
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...
- 搞IT,算法编程不错的学习网址 & 一些专栏博客大神的地址(汇总)
博客专栏大神 王晓华(算法的乐趣) 算法系列:http://blog.csdn.net/orbit/article/category/830251 PostgreSQL深入理解内核系列:http:// ...
- 珍藏多年的学习资料300G+,赶紧免费领取,从此离大神更进一步
将时间线拉到2014 2014年的寒冬,每天早晨六点钟,都会一个弱小的身影,从学校寝室出发,走在去实习公司的路上.经过食堂边的包子铺,他会顺手买两个包子,一杯豆浆,老板也会像往常一样热情的吆喝 ...
- 图论初步2<蒟蒻专属,大佬勿喷>
前言: 本节课讲的是图论的几种遍历方式,若没看图论初步1的赶紧去看 https://www.cnblogs.com/Craker/p/12271090.html 正文: 零.温故而知新 上节课我们学的 ...
- Android学习备忘笺01Activity
01.设置视图 在Android Studio新建的项目中,通过 setContentView(R.layout.activity_main);方法将res/layout/activity_main. ...
- Haxe UI框架StablexUI的使用备忘与心得(序)
最近在手上的项目开发中,从原来的使用Sprite全手写UI,开始逐步使用StablexUI,感觉还是相当不错的,强大.高效.轻量.灵活,非常适应我当前的实际需求. 不过作为小种语言的一个小众第三方开源 ...
- Swift学习-枚举(Enumerations)的使用方法
Swift学习-枚举的使用方法 枚举的使用语法: enum someEnumer { // 枚举的成员值 } 以下是方向的一个例子: enum direction { case Up case Dow ...
- Swift 学习- 09 -- 枚举
// 递归枚举 // 美家居为一组相关的值定义了一个共同的类型, 使你可以在代码中以类型安全的的方式使用这些值. // 如果你熟悉C语言, 你会知道在C语言中, 枚举会为一组整型值分配相关联的名称, ...
- ios -- 教你如何轻松学习Swift语法(三) 完结篇
前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦. 一.自动引用计数 1.自动引用计数工作机制 1.1 swift和o ...
随机推荐
- 普通身份运行Tomcat
普通身份运行Tomcat 转载1 权限分配问题 su - username -c “command”这样的形式可以使用任意一个有执行权限的用户执行 -c后边的命令. 注意,- username中间 ...
- Block使用变量,让你的程序看起来清晰!
<span style="font-size:24px;">为什么要使用block变量呢? 由于当我们的程序比較繁杂的时候,我们在一个函数中要调用一个函数,还须要在外边 ...
- PMP考试的过与只是
我在一年多时间里參加了三次PMP考试,前两次都失败,直到第三次才成功.怎样对待失败?这是每个人都会遇到的挑战.假设我们能用正确的态度对待临时的失败,那么终于的成功也就不远了.我希望通过本文与大家分享一 ...
- CentOS 6.7安装配置Ansible
1.准备CentOS环境 yum update && yum upgrade 2.控制服务器与被管理服务器要求 Master:Python 2.6+ Slave:Python 2.4+ ...
- 安卓Intent(显式)
1.Intent是Android程序中各组件之间交互的重要方式,一般可用于启动活动.启动服务.以及发送广播等场景,这里先对活动进行说明Intent的一些作用. 2.Intent的用法大致可分为,显式I ...
- HDU-1015(暴力)
Safecracker Problem Description === Op tech briefing, 2002/11/02 06:42 CST === "The item is loc ...
- Node.js + Express + Mongodb 开发搭建个人网站(三)
三.后台架构 1.在根目录下(和 views 文件夹同级)创建 lib 文件夹 以后所有后端内容 都是在这里写,分别创建三个文件夹 到 lib 目录下: mongo 放的是数据的存储 module ...
- C# 展开和折叠代码的快捷键
C# 展开和折叠代码的快捷键 VS2005代码编辑器的展开和折叠代码确实很方便和实用.以下是展开代码和折叠代码所用到的快捷键,很常用: Ctrl + M + O: 折叠所有方法 Ctrl + M + ...
- [功能帮助类] C#RandomHelper随机数,随机字符,可限制范围-帮助类 (转载)
点击下载 RandomHelper.rar 主要功能如下 .生成一个指定范围的随机整数,该随机数范围包括最小值,但不包括最大值 .生成一个0.0到1.0的随机小数 .对一个数组进行随机排序 . 一:随 ...
- javascript类继承系列一
js中没有提供类(class,抽象类,接口等高级的抽象),可以用new,但new的function的对象,构造器 但在js中可以通过function来模拟类的一些特性function fun_name ...