Swift 枚举(七)
http://blog.csdn.net/huangchentao/article/details/32714621
枚举
1.枚举语法
用enum并把定义放在大括号内,枚举中被定义的值是枚举的成员,case关键字表示新定义的一个成员
- enum SomeEnumeration {
- // enumeration definition goes here
- }
- enum CompassPoint {
- case North
- case South
- case East
- case West
- }
- //多个成员可以出现在同一行
- enum Planet {
- case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
- }
区别于C和OC,Swift中的枚举成员创建的时候不会赋予默认的整数值,相反,不同的成员在CompassPoint的一种显式定义中拥有各自不同的值
每个枚举相当于定义了一个全新的类型,名字以大写开头,尽量使用单数形式易于理解
- var directionToHead = CompassPoint.West
- directionToHead = .East
- // directionToHead定义为CompassPoint类型后,可直接只用点操作符再为其赋枚举里面的其他值
2.匹配枚举值和switch语句
- directionToHead = .South
- switch directionToHead {
- case .North:
- println("Lots of planets have a north")
- case .South:
- println("Watch out for penguins")
- case .East:
- println("Where the sun rises")
- case .West:
- println("Where the skies are blue")
- }
- // prints "Watch out for penguins"
当不需要匹配全部成员时,提供一个默认的default来表示所有未被提出的成员
- let somePlanet = Planet.Earth
- switch somePlanet {
- case .Earth:
- println("Mostly harmless")
- default:
- println("Not a safe place for humans")
- }
- // prints "Mostly harmless"
3.实例值
定义条形码和二维码类型,然后使用其中一种类型创建条码
- enum Barcode {
- case UPCA(Int, Int, Int)
- case QRCode(String)
- }
- var productBarcode = Barcode.UPCA(8, 85909_51226, 3)
- //同一种类型的商品可以分配给一个不同类型的条形码
- productBarcode = .QRCode("ABCDEFGHIJKLMNOP")
- //然后可以直接使用了
- switch productBarcode {
- case .UPCA(let numberSystem, let identifier, let check):
- println("UPC-A with value of \(numberSystem), \(identifier), \(check).")
- case .QRCode(let productCode):
- println("QR code with value of \(productCode).")
- }
- // prints "QR code with value of ABCDEFGHIJKLMNOP."
- // 简化写法
- switch productBarcode {
- case let .UPCA(numberSystem, identifier, check):
- println("UPC-A with value of \(numberSystem), \(identifier), \(check).")
- case let .QRCode(productCode):
- println("QR code with value of \(productCode).")
- }
- // prints "QR code with value of ABCDEFGHIJKLMNOP."
4.原始值 Raw Values
以下说明一个枚举的成员如何声明他们存储不同类型的实例值。作为实例值(原始值)的替代,枚举成员可以被默认值预先填充,他们具有相同的类型
- // 枚举成员存储原始ASCII值的例子,ASCIIControlCharacter的枚举的原始值类型被定义为字符类型Character
- enum ASCIIControlCharacter: Character {
- case Tab = "\t"
- case LineFeed = "\n"
- case CarriageReturn = "\r"
- }
原始值可以是字符串,字符,或者任何整数类型或浮点型,每一个原始值在声明中必须是唯一的,当整型值用于原始值,如果其他枚举成员没有赋值,则会自动递增
- enum Planet: Int {
- case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
- }
- // toRaw方法可以访问枚举成员的原始值
- let earthsOrder = Planet.Earth.toRaw()
- // earthsOrder is 3
- // 使用枚举的fromRaw方法找具有特定原始值的枚举成员
- let possiblePlanet = Planet.fromRaw(7)
- // possiblePlanet is of type Planet? and equals Planet.Uranus
- fromRaw方法可以返回一个可选的枚举成员
- let positionToFind = 9
- if let somePlanet = Planet.fromRaw(positionToFind) {
- switch somePlanet {
- case .Earth:
- println("Mostly harmless")
- default:
- println("Not a safe place for humans")
- }
- } else {
- println("There isn't a planet at position \(positionToFind)")
- }
- // prints "There isn't a planet at position 9"
版权声明:本文为博主原创文章,未经博主允许不得转载。
Swift 枚举(七)的更多相关文章
- 5.Swift枚举|结构体|类|属性|方法|下标脚本|继承
1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum Celebrity{ case DongXie,XiDu,Nandi,BeiGai } // 从左 ...
- swift 枚举类型
1:swift的枚举类型是一系列的值,不同于c语言中枚举类型是整数类型.每个枚举定义了个新的类型 2:switch类型匹配 2.1枚举类型和switch单个匹配 enum PlatType{ case ...
- [Swift]枚举
1. Swift的枚举的基本用法: 1) 和其它语言枚举的意义相同,就是用有限的一组值(不能是无限的)来表示一些特定的含义: 2) Swift使用关键字enum定义枚举类型,定义体中用case定义成员 ...
- Swift枚举|结构体|类|属性|方法|下标脚本|继承
1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum Celebrity{ case DongXie,XiDu,Nandi,BeiGai } // 从左 ...
- 【iOS】swift 枚举
枚举语法 你可以用enum开始并且用大括号包含整个定义体来定义一个枚举: enum SomeEnumeration { // 在这里定义枚举 } 这里有一个例子,定义了一个包含四个方向的罗盘: enu ...
- Swift枚举的全用法
鉴于昨天开会部门会议讨论的时候,发现有些朋友对枚举的用法还是存在一些疑问,所以就写下这个文章,介绍下Swift下的枚举的用法. 基本的枚举类型 来,二话不说,我们先贴一个最基本的枚举: enum Mo ...
- Swift 枚举-从汇编角度看枚举内存结构
一.基本使用 先看枚举的几种使用(暂不要问,看看是否都能看懂,待会会逐一讲解) 1.操作一 简单使用 //第一种方式 enum Direction { case east case west case ...
- swift枚举
以下是指南针四个方向的一个例子: enum CompassPoint { case North case South case East case West } 多个成员值可以出现在同一行上,用 ...
- swift 笔记 (七) —— 关闭
关闭 封闭件是从包括以下各项的组.它可以在代码被发送"片"... 行,不纠结的定义.继续. swift的闭包,有点像C和Objective-C语言里的 代码块 {--} 闭包能够 ...
随机推荐
- Struts2(二.用户登录模块)
1.编写Javabean /src/myuser/User.java 在strut1中,Javabean需要继承于struts1 api中的ActionForm类.struts2没有此要求 strut ...
- CSP201604-1:折点计数
引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...
- redis安装与启动
安装简介: 在安装redis前需要了解redis官方发布时的版本规则,redis官方约定次版本号(即第一个小数点后的数字)为偶数的版本是稳定版(如2.8版,3.0版),奇数版本则为非稳定版本(如2.7 ...
- NO12——快速幂取模
long long quickmod(long long a,long long b,long long m) { ; while(b)//用一个循环从右到左便利b的所有二进制位 { )//判断此时b ...
- 详细讲解Java中方法的重载和重写
首先讲讲方法的重载: Java的重载就是在类中可以创建多个方法,它们具有相同的名字,但是却有不同的参数. 判断是否重载只有两个条件: 1)相同的方法名 2)不同的参数 具体为: A.方法参数类型不同 ...
- Linux SPI总线和设备驱动架构之二:SPI通用接口层
通过上一篇文章的介绍,我们知道,SPI通用接口层用于把具体SPI设备的协议驱动和SPI控制器驱动联接在一起,通用接口层除了为协议驱动和控制器驱动提供一系列的标准接口API,同时还为这些接口API定义了 ...
- oracle INSERT INTO多个值
稍微熟悉Oracle的都知道,如果我们想一条SQL语句向表中插入多个值的话,如果INSERT INTO 某表 VALUES(各个值),VALUES(各个值),.....;这样会报错的,因为oracle ...
- Mybatis学习系列(一)入门简介
MyBatis简介 Mybatis是Apache的一个Java开源项目,是一个支持动态Sql语句的持久层框架.Mybatis可以将Sql语句配置在XML文件中,避免将Sql语句硬编码在Java类中.与 ...
- ArcGIS API for javascript中搜索框的使用问题
我们在开发中常常需要用搜索框去搜索地图上的某个数据,然后在地图上显示出来.这个时候我们要用到esri.dijit.Search().在设置里面的sources的时候,需要注意一点:必须要使用在线的fe ...
- java中bug调试
根据打印异常位置,定位异常代码,判断有无低级错误,直接更改 否则判断有无相似代码,其他代码和异常代码的区别对比 给内层代码打断点,跟踪异常位置