枚举定义了一个通用类型的一组相关值,使你可以在你的代码中以一种安全的方式来使用这些值。

  1. // 定义枚举的语法
  2. enum Chips { // 定义了薯片的枚举,包含了3种口味的成员
  3. case Tomato
  4. case Original
  5. case Barbecue
  6. }

每个枚举定义了一个全新的类型。像 Swift 中其他类型一样,它们的名字必须以一个大写字母开头。给枚举类型起一个单数名字而不是复数名字,以便于读起来更加容易理解.

一般匹配枚举值都是用switch

  1. var chip = Chips.Original
  2. // 匹配枚举值
  3. switch chip {
  4. case .Tomato :
  5. print("tomato")
  6. case .Original :
  7. print("original")
  8. case .Barbecue :
  9. print("barbecue")
  10. }

上面的例子演示了枚举的基本语法,下面来记录一下为成员值赋予一个任何属性的相关值,一起储存起来的话一些特别情况会更便利些

  1. // <假如>自定义了一个控件需要传控件的显示形式(如button的custom)
  2. enum ViewType {
  3. case Normal(String) // 比如说需要传进一个要显示的字符串
  4. case Contains(Double, Double) // 比如说需要传进显示比例
  5. }
  6.  
  7. var viewType = ViewType.Normal("传入了需要显示的字符串(赋予了相关值)")
  8.  
  9. switch viewType {
  10. case .Normal(var str) :
  11. print("设置控件需要显示的字符串");
  12. case let .Contains(widthScale, hightScale) :
  13. print("设置控件的宽高缩放比例");
  14. }

作为相关值的另一种选择,枚举成员可以被默认值(称为原始值)赋值,其中这些原始值具有相同的类型。

  1. enum Month : Int { // 因为原始值类型必须一致 所以将原始值定义为Int 注意:原始值和相关值不能同时使用
  2. case January // 如果没有给定原始值 会隐式将第一个成员赋值为0,随后的每一个成员递增1
  3. case February
  4. case March
  5. case April
  6. }
  7.  
  8. var february = Month.February
  9. print(february, february.rawValue) // 输出:"February 1\n"
  1. enum Month : Int { // 也可以将所有成员值缩减到1行 与之前的效果是一样的
  2. case January = 1, February, March, April
  3. }
  4.  
  5. var february = Month.February
  6. print(february, february.rawValue) // 输出:"February 2\n"

注:如果初始值为Float或Double的话也会默认递增1

  1. enum Month : String { // 如果是字符串类型的初始值、并且没有显式的赋值,那么就将成员名字设置为初始值
  2. case January = "1月", February, March, April
  3. }
  4.  
  5. var january = Month.January
  6. print(january, january.rawValue) // 输出:"January 1月\n"
  7.  
  8. var march = Month.March
  9. print(march, march.rawValue) // 输出:"March March\n"

下面来记一下通过原始值来构造枚举

  1. enum ViewContentType : Int { // 模拟一个视图的内容模式
  2. case Normal = 0, System, Custom, Ancient
  3. }
  4.  
  5. // 根据原始值构造一个枚举
  6. if let type = ViewContentType(rawValue: 2){ // 注意 原始值构造器是可失败构造器(可能会返回nil)所以返回的是可选类型,需要使用可选绑定
  7. switch type {
  8. case .Normal:
  9. // do something...
  10. print(type)
  11. case .System:
  12. // do something...
  13. print(type)
  14. default:
  15. // do sonthing...
  16. print(type) // 最后输出这一句
  17. }
  18. }

下面来记录下相比较OC中的枚举 Swift枚举的新特性:Swift中 枚举可以定义类型属性和实例属性

  1. // <假如>自定义了一个控件需要传控件的显示形式(如button的custom)
  2. enum ViewType {
  3.  
  4. // 我们拿这个枚举举例 假如说声明一个实例属性可以返回相对应成员值的size 注意 viewSize是只读的计算属性
  5. var viewSize : CGSize {
  6. switch self {
  7. // 参数暂时省略
  8. // 可以根据不同的成员返回相对应的size
  9. case .Normal(_) : return CGSize(width: 100, height: 20)
  10. case .Contains(_, _) : return CGSize(width: 390, height: 300)
  11. }
  12. }
  13.  
  14. // 声明类型属性
  15. static let comment = "这个枚举有两个成员,设置不同的值来改变控件的摆布状态"
  16.  
  17. case Normal(String) // 比如说需要传进一个要显示的字符串
  18. case Contains(Double, Double) // 比如说需要传进显示比例
  19. }
  20.  
  21. let type = ViewType.Normal("一个字符串")
  22. // 调用实例计算属性 获得size
  23. let viewSize = type.viewSize
  24.  
  25. // 调用类型计算属性
  26. print(ViewType.comment)

枚举还可以声明方法

  1. enum Month : Int { // 因为原始值类型必须一致 所以将原始值定义为Int 注意:原始值和相关值不能同时使用
  2.  
  3. // 枚举可以声明方法 就跟类的写法一样 不过要是修改自身的值就需要加一个关键字
  4. mutating func nextMonth() -> String {
  5. switch self {
  6. case January :
  7. self = February
  8. return "已经到2月拉"
  9.  
  10. case .February :
  11. self = March
  12. return "已经到3月拉"
  13.  
  14. default : return "以此类推"
  15. }
  16. }
  17.  
  18. case January // 如果没有给定原始值 会隐式将第一个成员赋值为0,随后的每一个成员递增1
  19. case February
  20. case March
  21. case April
  22. }
  23.  
  24. var month = Month(rawValue: 0) // january
  25. let string = month?.nextMonth() // 返回一个字符串 并且把成员值改为February
  26. print(month) // 打印出 "Optional(Month.February)\n"

学习Swift--枚举的初步认识 --个人备忘 大神勿喷的更多相关文章

  1. 工作效率-十五分钟让你快速学习Markdown语法到精通排版实践备忘

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...

  2. 搞IT,算法编程不错的学习网址 & 一些专栏博客大神的地址(汇总)

    博客专栏大神 王晓华(算法的乐趣) 算法系列:http://blog.csdn.net/orbit/article/category/830251 PostgreSQL深入理解内核系列:http:// ...

  3. 珍藏多年的学习资料300G+,赶紧免费领取,从此离大神更进一步

    将时间线拉到2014     2014年的寒冬,每天早晨六点钟,都会一个弱小的身影,从学校寝室出发,走在去实习公司的路上.经过食堂边的包子铺,他会顺手买两个包子,一杯豆浆,老板也会像往常一样热情的吆喝 ...

  4. 图论初步2<蒟蒻专属,大佬勿喷>

    前言: 本节课讲的是图论的几种遍历方式,若没看图论初步1的赶紧去看 https://www.cnblogs.com/Craker/p/12271090.html 正文: 零.温故而知新 上节课我们学的 ...

  5. Android学习备忘笺01Activity

    01.设置视图 在Android Studio新建的项目中,通过 setContentView(R.layout.activity_main);方法将res/layout/activity_main. ...

  6. Haxe UI框架StablexUI的使用备忘与心得(序)

    最近在手上的项目开发中,从原来的使用Sprite全手写UI,开始逐步使用StablexUI,感觉还是相当不错的,强大.高效.轻量.灵活,非常适应我当前的实际需求. 不过作为小种语言的一个小众第三方开源 ...

  7. Swift学习-枚举(Enumerations)的使用方法

    Swift学习-枚举的使用方法 枚举的使用语法: enum someEnumer { // 枚举的成员值 } 以下是方向的一个例子: enum direction { case Up case Dow ...

  8. Swift 学习- 09 -- 枚举

    // 递归枚举 // 美家居为一组相关的值定义了一个共同的类型, 使你可以在代码中以类型安全的的方式使用这些值. // 如果你熟悉C语言, 你会知道在C语言中, 枚举会为一组整型值分配相关联的名称, ...

  9. ios -- 教你如何轻松学习Swift语法(三) 完结篇

    前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦.      一.自动引用计数   1.自动引用计数工作机制      1.1 swift和o ...

随机推荐

  1. 验证码 jsp生成

    <%@ page contentType="image/jpeg" import="java.awt.*, java.awt.image.*,java.util.* ...

  2. 20169210《Linux内核原理与分析》课程总结

    每周作业链接汇总 第一周作业:对实验楼<Linux 基础入门(新版)>课程的学习,其中有用户及文件权限管理.Linux 目录结构及文件基本操作.环境变量与文件查找.文件打包与解压缩等共17 ...

  3. 使用dom4j对xml文件进行增删改查

    1.使用dom4j技术对dom_demo.xml进行增删改查 首选要下载dom4j的jar包 在官网上找不到,网上搜索了一下在这个链接:http://sourceforge.net/projects/ ...

  4. android开发之PreferenceScreen使用详解

    是在惭愧,学习android也有一段时间了,今天才是第一次接触PreferenceScreen.记录下来,与大家分享. 本文参考:http://lovezhou.iteye.com/blog/1020 ...

  5. 对RecycleView的多种item布局的封装

    本文是借鉴bingoogolapple写得BGAAdapter-Android而产生的,对此表示感谢. 效果 1.Adapter的使用 1.继承BaseAdapter 这里是我的adapter pub ...

  6. ubuntu 12.04 编译安装 nginx

    下载源码包 nginx 地址:http://nginx.org/en/download.html 编译前先安装两个包: 直接编译安装会碰到缺少pcre等问题,这时候只要到再安装两个包就ok sudo ...

  7. Windows环境下使用cygwin ndk_r9c编译x264

     一.废话 最近学习,第一步就是编译.我们需要编译FFmpag,x264,fdk_aac,下面是x264,网上说的很多都是几百年前的,我亲测完美可用 还是那句话 我能力有限,但是我希望我写的东西能够让 ...

  8. mvc5 + ef6 + autofac搭建项目(repository+uow)(一)

    直奔主题了,不那么啰嗦. 整体框架的参考来源是  O# 的框架,在此感谢锋哥一直以来的开源,让我们有的学 如下图: (图一) 一下分三个步骤说明,分别为 dbContext,repository,uo ...

  9. 关于iOS元旦http,https的规定,官方论坛回应

    先贴原文地址:https://forums.developer.apple.com/thread/48979#146140 原文: eskimoAug 2, 2016 4:17 AM(in respo ...

  10. DBA 培训相应内容笔记

    014-12-23 slow hang lock 三种常见性能问题 hang;整个数据库不响应,无法创建新连接. hanganalyze输出. dump文件是否有问题信息, 文件是否有其他信息 工具: ...