http://blog.csdn.net/huangchentao/article/details/32714621

枚举

1.枚举语法

用enum并把定义放在大括号内,枚举中被定义的值是枚举的成员,case关键字表示新定义的一个成员

  1. enum SomeEnumeration {
  2. // enumeration definition goes here
  3. }
  4. enum CompassPoint {
  5. case North
  6. case South
  7. case East
  8. case West
  9. }
  10. //多个成员可以出现在同一行
  11. enum Planet {
  12. case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
  13. }

区别于C和OC,Swift中的枚举成员创建的时候不会赋予默认的整数值,相反,不同的成员在CompassPoint的一种显式定义中拥有各自不同的值
每个枚举相当于定义了一个全新的类型,名字以大写开头,尽量使用单数形式易于理解

  1. var directionToHead = CompassPoint.West
  2. directionToHead = .East
  3. // directionToHead定义为CompassPoint类型后,可直接只用点操作符再为其赋枚举里面的其他值

2.匹配枚举值和switch语句

  1. directionToHead = .South
  2. switch directionToHead {
  3. case .North:
  4. println("Lots of planets have a north")
  5. case .South:
  6. println("Watch out for penguins")
  7. case .East:
  8. println("Where the sun rises")
  9. case .West:
  10. println("Where the skies are blue")
  11. }
  12. // prints "Watch out for penguins"

当不需要匹配全部成员时,提供一个默认的default来表示所有未被提出的成员

  1. let somePlanet = Planet.Earth
  2. switch somePlanet {
  3. case .Earth:
  4. println("Mostly harmless")
  5. default:
  6. println("Not a safe place for humans")
  7. }
  8. // prints "Mostly harmless"

3.实例值

定义条形码和二维码类型,然后使用其中一种类型创建条码

  1. enum Barcode {
  2. case UPCA(Int, Int, Int)
  3. case QRCode(String)
  4. }
  5. var productBarcode = Barcode.UPCA(8, 85909_51226, 3)
  6. //同一种类型的商品可以分配给一个不同类型的条形码
  7. productBarcode = .QRCode("ABCDEFGHIJKLMNOP")
  8. //然后可以直接使用了
  9. switch productBarcode {
  10. case .UPCA(let numberSystem, let identifier, let check):
  11. println("UPC-A with value of \(numberSystem), \(identifier), \(check).")
  12. case .QRCode(let productCode):
  13. println("QR code with value of \(productCode).")
  14. }
  15. // prints "QR code with value of ABCDEFGHIJKLMNOP."
  16. // 简化写法
  17. switch productBarcode {
  18. case let .UPCA(numberSystem, identifier, check):
  19. println("UPC-A with value of \(numberSystem), \(identifier), \(check).")
  20. case let .QRCode(productCode):
  21. println("QR code with value of \(productCode).")
  22. }
  23. // prints "QR code with value of ABCDEFGHIJKLMNOP."

4.原始值 Raw Values

以下说明一个枚举的成员如何声明他们存储不同类型的实例值。作为实例值(原始值)的替代,枚举成员可以被默认值预先填充,他们具有相同的类型

  1. // 枚举成员存储原始ASCII值的例子,ASCIIControlCharacter的枚举的原始值类型被定义为字符类型Character
  2. enum ASCIIControlCharacter: Character {
  3. case Tab = "\t"
  4. case LineFeed = "\n"
  5. case CarriageReturn = "\r"
  6. }

原始值可以是字符串,字符,或者任何整数类型或浮点型,每一个原始值在声明中必须是唯一的,当整型值用于原始值,如果其他枚举成员没有赋值,则会自动递增

  1. enum Planet: Int {
  2. case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
  3. }
  4. // toRaw方法可以访问枚举成员的原始值
  5. let earthsOrder = Planet.Earth.toRaw()
  6. // earthsOrder is 3
  7. // 使用枚举的fromRaw方法找具有特定原始值的枚举成员
  8. let possiblePlanet = Planet.fromRaw(7)
  9. // possiblePlanet is of type Planet? and equals Planet.Uranus
  10. fromRaw方法可以返回一个可选的枚举成员
  11. let positionToFind = 9
  12. if let somePlanet = Planet.fromRaw(positionToFind) {
  13. switch somePlanet {
  14. case .Earth:
  15. println("Mostly harmless")
  16. default:
  17. println("Not a safe place for humans")
  18. }
  19. } else {
  20. println("There isn't a planet at position \(positionToFind)")
  21. }
  22. // prints "There isn't a planet at position 9"

版权声明:本文为博主原创文章,未经博主允许不得转载。

Swift 枚举(七)的更多相关文章

  1. 5.Swift枚举|结构体|类|属性|方法|下标脚本|继承

    1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum  Celebrity{  case DongXie,XiDu,Nandi,BeiGai }  // 从左 ...

  2. swift 枚举类型

    1:swift的枚举类型是一系列的值,不同于c语言中枚举类型是整数类型.每个枚举定义了个新的类型 2:switch类型匹配 2.1枚举类型和switch单个匹配 enum PlatType{ case ...

  3. [Swift]枚举

    1. Swift的枚举的基本用法: 1) 和其它语言枚举的意义相同,就是用有限的一组值(不能是无限的)来表示一些特定的含义: 2) Swift使用关键字enum定义枚举类型,定义体中用case定义成员 ...

  4. Swift枚举|结构体|类|属性|方法|下标脚本|继承

    1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum  Celebrity{  case DongXie,XiDu,Nandi,BeiGai }  // 从左 ...

  5. 【iOS】swift 枚举

    枚举语法 你可以用enum开始并且用大括号包含整个定义体来定义一个枚举: enum SomeEnumeration { // 在这里定义枚举 } 这里有一个例子,定义了一个包含四个方向的罗盘: enu ...

  6. Swift枚举的全用法

    鉴于昨天开会部门会议讨论的时候,发现有些朋友对枚举的用法还是存在一些疑问,所以就写下这个文章,介绍下Swift下的枚举的用法. 基本的枚举类型 来,二话不说,我们先贴一个最基本的枚举: enum Mo ...

  7. Swift 枚举-从汇编角度看枚举内存结构

    一.基本使用 先看枚举的几种使用(暂不要问,看看是否都能看懂,待会会逐一讲解) 1.操作一 简单使用 //第一种方式 enum Direction { case east case west case ...

  8. swift枚举

    以下是指南针四个方向的一个例子:  enum CompassPoint { case North case South case East case West }   多个成员值可以出现在同一行上,用 ...

  9. swift 笔记 (七) —— 关闭

    关闭 封闭件是从包括以下各项的组.它可以在代码被发送"片"... 行,不纠结的定义.继续. swift的闭包,有点像C和Objective-C语言里的 代码块 {--}  闭包能够 ...

随机推荐

  1. fiddler之弱网测试

    今天就说一下如何使用fiddler做弱网测试 1.首先要把手机的代理打开,这就不多讲了哈,不懂得话请点传送门:https://www.cnblogs.com/fuxinxin/p/9146693.ht ...

  2. FlaskWeb开发从入门到放弃(二)

    第5章 章节五 01 内容概要 02 内容回顾 03 面向对象相关补充:metaclass(一) 04 面向对象相关补充:metaclass(二) 05 WTforms实例化流程分析(一) 06 WT ...

  3. 使用git创建分支

    Git大法好--3.Git分支本地操作详解 这时已经切换到了dingBranch分支下面了,在项目文件夹下添加一个dingBranchtest.txt文件,然后提交到本地仓库和远程仓库: git ad ...

  4. Java 端口扫描器 TCP的实现方法

    想必很多朋友都实现过一个简易的聊天室这个功能,其中涉及到Socket套接字这个类,我们通过一个特定的IP以及特定的端口创建一个服务端的套接字(ServerSocket),以此我们聊天个体的套接字(So ...

  5. beta版本冲刺四

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员:恺琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组 ...

  6. 阿里云服务器 linux下载 jdk

    直接从本地下载包上传比较慢.直接在服务器上下载安装包: 1.进入orcle官网; 2.选择需要下载的版本,下载需要同意orcle协议, 3.点击下载,获取到下载请求的cookie, 复制所有cooki ...

  7. JAVA高并发处理------多线程

    线程安全概念:当多个线程访问某一个类(对象或方法)时,这个对象始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的. 分析:当多个线程访问myThread的run方法时,以排队的方式进行处 ...

  8. linq.js的用法

    linq.js 详细介绍 linq.js 是一个 JavaScript 实现的 LINQ. 主要特性: 实现所有 .NET 4.0 的方法 complete lazy evaluation full ...

  9. [Leetcode] String to integer atoi 字符串转换成整数

    Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...

  10. C&C++——C函数与C++函数相互调用问题

    C C++相互调用 在项目中融合C和C++有时是不可避免的,在调用对方的功能函数的时候,或许会出现这样那样的问题,但只要我的C代码和我的C++代码分别都能成功编译,那其他就不是问题.近来在主程序是C语 ...