当前位置: 首页 > news >正文

《从零开始学Swift》学习笔记(Day 24)——枚举(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(圆形)。RectangleCircle是与Figure有关联的相关值,它们都是元组类型,对于一个特定的Figure实例,只能是其中一个相关值。从这一点来看,枚举类型的相关值类似于C中的联合类型。

 

欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
                              wKioL1bVZ_nyYVeQAAAs2MBEZnc108.png

更多精品iOSCocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php

 


相关文章:

  • 日志管理
  • 初探验证码识别
  • HttpClient4.5教程-基础 1.1
  • Spring的IoC容器(转)BeanFactory
  • 最短路问题------分别用深搜和广搜去解题
  • linux ps 查看耗cpu高的线程
  • LVS-NAT 模式配置
  • 堆内存与栈内存
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • shell中的特殊符号
  • zookeeper环境搭建中的几个坑[Error contacting service. It is probably not running]的分析及解决...
  • J2EE 第二阶段项目之JUnit4进行单元测试(五)
  • 3月9日(用 DBHelper 工具连接 mysql 数据库 实现登录验证)
  • python socket编程入门(编写server实例)+send 与sendall的区别与使用方法
  • POJ - 1170 Shopping Offers (五维DP)
  • 时间复杂度分析经典问题——最大子序列和
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • gcc介绍及安装
  • Java教程_软件开发基础
  • overflow: hidden IE7无效
  • PAT A1050
  • PHP那些事儿
  • python 装饰器(一)
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • yii2权限控制rbac之rule详细讲解
  • 阿里云应用高可用服务公测发布
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 关于使用markdown的方法(引自CSDN教程)
  • 微信开放平台全网发布【失败】的几点排查方法
  • 微信小程序填坑清单
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • MPAndroidChart 教程:Y轴 YAxis
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (day6) 319. 灯泡开关
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (HAL库版)freeRTOS移植STMF103
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)socket Aio demo
  • .apk文件,IIS不支持下载解决
  • .Family_物联网
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET Core中Emit的使用
  • .net 验证控件和javaScript的冲突问题
  • .NetCore项目nginx发布
  • .NET项目中存在多个web.config文件时的加载顺序
  • .NET中的Exception处理(C#)
  • /etc/shadow字段详解
  • ?.的用法
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...