《从零开始学Swift》学习笔记(Day 24)——枚举

原创文章,欢迎转载。转载请注明:关东升的博客


Swift中的枚举可以定义一组常量、提高程序的可读性;还具有面向对象特性。
使用enum关键词声明枚举类型,具体定义放在一对大括号内,枚举的语法格式如下:
enum 枚举名
{
     枚举的定义
}
“枚举名”是该枚举类型的名称。它首先应该是有效的标识符,其次应该遵守面向对象的命名规范,它由一组成员值和一组相关值组成。

成员值
枚举的成员值默认情况下不是整数类型,以下代码是声明枚举示例:

enum WeekDays {
    case Monday
    case Tuesday
    case Wednesday
    case Thursday
    case Friday
}

在这些成员值前面要加上case关键字,也可以将多个成员值放在同一行,用逗号隔开,如下所示:

enum WeekDays {
    case Monday, Tuesday, Wednesday, Thursday, Friday
}

下面我们看一个示例,代码如下:

var day = WeekDays.Friday 
day = WeekDays.Wednesday 
day = .Monday   

使用枚举成员赋值时候,我们可以采用完整的“枚举类型名.成员值”的形式,也可以省略枚举类型采用“.成员值”的形式。这种省略形式能够访问的前提是,Swift编译器能够根据上下文环境推断类型。因为我们已经在第1行和第2行给day变量赋值,所以即使第3行代码采用缩写,Swift编译器能够推断出数据类型是WeekDays。

原始值
出于业务上的需要,要为每个成员提供某种基本数据类型,我们可以为枚举类型提供原始值(raw values)声明,这些原始值类型可以是:字符、字符串、整数和浮点数等。
原始值枚举的语法格式如下:
enum 枚举名: 数据类型
{   
  case 成员名 = 默认值
  ...
}
在“枚举名”后面跟“:”和“数据类型”就可以声明原始值枚举的类型,然后在定义case成员的时候需要提供原始值。
以下代码是声明枚举示例:

enum WeekDays: Int {
    case Monday         = 0
    case Tuesday         = 1
    case Wednesday      = 2
    case Thursday        = 3
    case Friday          = 4
}


我们声明的WeekDays枚举类型的原始值类型是Int,需要给每个成员赋值,只要是Int类型都可以,但是每个分支不能重复。

相关值
在Swift中除了可以定义一组成员值,还可以定义一组相关值(associated values),它有点类似于C中的联合类型。下面看一个枚举类型的声明:

enum Figure {
    case Rectangle(Int, Int)
    case Circle(Int)
}

枚举类型Figure(图形)有两个相关值: Rectangle(矩形)和Circle(圆形)。Rectangle和Circle是与Figure有关联的相关值,它们都是元组类型,对于一个特定的Figure实例,只能是其中一个相关值。从这一点来看,枚举类型的相关值类似于C中的联合类型。


欢迎关注关东升新浪微博@tony_关东升
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
  
更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:
http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php



http://www.niftyadmin.cn/n/1036493.html

相关文章

python实现简单抢红包算法

微信群又发红包了?让我先抢他一个亿。当抢红包我们大呼过瘾时,不如一起来看看隐藏其后的算法。 发出一个固定金额的红包,由若干个人来抢,需要满足哪些规则? 当然是如下了: 1.所有人抢到金额之和等于红包金…

基于朴素贝叶斯的垃圾邮件识别

在网上看到很多用朴素贝叶斯算法来实现垃圾邮件分类的,有直接调用库的,也有自己写的。出于对贝叶斯算法的复习,我也想用贝叶斯算法写写邮件识别,做一个简单的识别系统。 一.开发环境 Python3.6,邮件包(包含…

C/C++无符号整数回绕判断

一.加法 先验条件测试。下面的代码执行加法操作数的一个先验条件测试&#xff0c;以保证没有回绕的可能性。 unsigned int ui1,ui2,sum; /*初始化ui1,ui2*/ if(UINT_MAX-ui1<ui2)//UINT_MAX头文件是<limits.h> { /*处理错误情况*/ } else { sumui1ui2; ] 后验条件…

C语言解决八皇后问题

八皇后问题是这样一个问题&#xff1a;将八个皇后摆在一张8*8的国际象棋棋盘上&#xff0c;使每个皇后都无法吃掉别的皇后&#xff0c;即&#xff1a;每一行&#xff0c;每一列&#xff0c;每一条对角线只有一个皇后&#xff0c;一共有多少种摆法&#xff1f; 算法思想&#x…

Leetcode-1201丑数III

请你帮忙设计一个程序&#xff0c;用来找出第 n 个丑数。 丑数是可以被 a 或 b 或 c 整除的 正整数。 示例 1&#xff1a; 输入&#xff1a;n 3, a 2, b 3, c 5 输出&#xff1a;4 解释&#xff1a;丑数序列为 2, 3, 4, 5, 6, 8, 9, 10... 其中第 3 个是 4。 示例 2&…

连续差相同的数字-Leetcode967

返回所有长度为 N 且满足其每两个连续位上的数字之间的差的绝对值为 K 的非负整数。 请注意&#xff0c;除了数字 0 本身之外&#xff0c;答案中的每个数字都不能有前导零。例如&#xff0c;01 因为有一个前导零&#xff0c;所以是无效的&#xff1b;但 0 是有效的。 你可以按…

Leetcode-1094 拼车

假设你是一位顺风车司机&#xff0c;车上最初有 capacity 个空座位可以用来载客。由于道路的限制&#xff0c;车 只能 向一个方向行驶&#xff08;也就是说&#xff0c;不允许掉头或改变方向&#xff0c;你可以将其想象为一个向量&#xff09;。 这儿有一份行程计划表 trips[]…

Leetcode-1095 山脉数组中查找目标值

&#xff08;这是一个 交互式问题 &#xff09; 给你一个 山脉数组 mountainArr&#xff0c;请你返回能够使得 mountainArr.get(index) 等于 target 最小 的下标 index 值。 如果不存在这样的下标 index&#xff0c;就请返回 -1。 所谓山脉数组&#xff0c;即数组 A 假如是一…