iOS枚举的运用
1.什么是枚举?
1.什么是枚举?
枚举其实就是一个整型常数的集合,最简单的例子就是表示星期的SUN, MON, TUE, WED, THU, FRI,SAT, 就是一个枚举。
2.iOS中枚举的使用
在ObjC中可以使用C语言的方式进行枚举,其实ObjC的枚举就是在C语言上演化而来,先了解C语言定义一个枚举的方式有助于我们对枚举的理解。
1.C语言中的枚举(ObjC兼容)
下面我们定义一个枚举类型Animal,形式为 enum 枚举名 {枚举值表} ; 我们在名为Animal的枚举中申明了多个成员名,我们可以看作是整形常量的别名。我们把cat赋值为1,系统会默认为后续枚举成员的值在前一个成员上加1,如dog为2,pig为3以此类推。当然枚举成员的值我们也可以自定义,例如我们可以为cat赋值为50,dog赋值为100,所有的赋值关键就是让编程人员容易读懂和理解。
//枚举类型的定义
enum Animal
{
cat=1, dog, pig, bee, monkey, elephant , butterfly
};
enum Animal animal = cat;//声明Animal枚举型的枚举变量
我们也可以同时声明枚举类型和枚举型变量,下面第一种定义方式没有定义枚举的类型,但是声明了枚举变量workday。 第二中分别定义了枚举类型enum week和变量days。
//类型定义与变量声明同时进行
enum //跟第一个定义不同的是,此处的类型标号省略,这是允许的。
{
saturday,
sunday = 0,
monday,
tuesday,
wednesday,
thursday,
friday
} workday; //变量workday
enum week { Mon=1, Tue, Wed, Thu, Fri ,Sat, Sun} days; //变量days的类型为枚举型enum week
用typedef关键字将枚举类型定义成别名,并利用该别名进行变量声明,下面例子中我们将enum Car定义成别名Car。
typedef enum Car
{
//以下是枚举成员
BMW = 0,
Benz,
Ferrari,
Royce
}Car;//枚举名称
Car car;//声明Car类型的变量
typedef enum //可以省略enum Car中的Car
{
//以下是枚举成员
BMW = 0,
Benz,
Ferrari,
Royce
}Car;//枚举名称
Car car;//声明Car类型的变量
2.iOS中的枚举
在iOS中主要苹果推荐用NSENUM,NSOPTIONS 两种方式去声明一个枚举。
• NSENUM声明一般类型, NSOPTIONS声明掩码(bitmasked)类型
下面使用NSOPTIONS掩码类型进行声明枚举,形式为 typedef NSOPTIONS(枚举成员类型,枚举类型名称){枚举成员…};
"<<"是左移运算符,"1 << 0"表示1左移0位。在二进制中,左移意味着对应的十进制数乘2。
好处:我们在枚举值中看见<<那我们就可以通过|(位运算符:或)进行组合!像下面定义的CatDaily一样
//NS_OPTIONS:是用来声明位掩码(bitmasked)
typedef NS_OPTIONS(NSInteger,MyCatEvent) {
CatNone = 0,
CatWalk = 1 << 0, // <<表示左移运算符 表示0001
CatJump = 1 << 1,
CatBark = 1 << 2,
CatEat = 1 << 3,
CatSleep = 1 << 4,
CatDaily = CatWalk | CatJump
};
通过&进行判断我们来看看输出结果如下图:
我们可以看到我们定义的CatWalk值为1,CatJump为2,所以或运算的value值为3。在打印语句中,我们用value对所有的枚举成员进行与运算。我们可以通过输出的值来判断value。包含哪些枚举成员。结果为0表示不包含,结果为1对应catwalk,以此类推。
用NSENUM声明一般类型,下面声明了两种枚举类型,类型成员分别赋值十进制数和十六进制数。为什么要用两种不同的方式呢?本质上这两种方式并没有什么区别,但是16进制的数更容易对转换到2进制,当我们需要对枚举成员做与、或运算时更加的方便。
//NS_ENUM:是用来声明一般的NSInteger(下面代码使用NSInteger)类型的枚举
typedef NS_ENUM(NSInteger,MyBoyEvent){
BoyFeedCat = 0,
BoyWalkCat = 1,
};
//十六进制枚举
typedef NS_ENUM(NSInteger,DailyEvent){
DailyNone = 0x00,
DailyRead = 0x01,
DailyWrite = 0x02,
DailySing = 0x03,
DailyShopping = 0x04,
};
以上如果有任何错误,希望大家指正。
更多的iOS笔记可以来到我的博客:tianxianbob.com交流
参考链接:http://www.cnblogs.com/JCSU/articles/1299051.html
http://www.jianshu.com/p/97e582fe89f3
iOS枚举的运用的更多相关文章
- iOS 枚举 初体验
iOS枚举 我的code /*文件名 SC_CDV_OCR.m*/ typedef enum _OCRResultState { OCRResultStateOK = 1, OCRResultStat ...
- iOS 枚举的巧用
前言 在之前的一篇文章中简单的提到了这个问题, 但是自己写的不详细, 并且自己深入了解的也不是特别多, 在开发中也没怎么用到,所以经过阅读者的反馈对这个问题很是疑惑! 本篇文章会分析之前的不足之处, ...
- IOS枚举使用
1.方法一: typedef enum { one = 0, two, }Name; 2.方法二: typedef NS_ENUM(NSInteger, name) { one, two }; 注:a ...
- iOS: 枚举类型 enum,NS_ENUM,NS_OPTIONS
一般情况下,我们采用C风格的enum关键字可以定义枚举类型. enum{ UIViewAnimationTransitionNone, UIViewAnimationTransitionFlipFro ...
- iOS 枚举讲解
枚举增强程序的可读性,用法上还是需要注意的 1.C语言的写法 enum XMPPReconnectFlags { kShouldReconnect = 1 << 0, // If set, ...
- IOS 枚举 enum
前言:oc中枚举的正确使用,可以增强代码的可读性,减少各种“错误”,让代码更加的规范.下面先介绍枚举的用法,最后介绍个人对枚举的理解,什么是枚举,为什么用枚举. 一. OC中,枚举的使用 1. 写法1 ...
- ios枚举规范
- iOS 枚举写法
1.第一种 typedef enum { kPRStateNormal = 0, kPRStatePulling = 1, kPRStateLoading = 2, kPRStateHitTheEnd ...
- iOS 枚举ENUM和OPTIONS的区别
随机推荐
- 微信小程序的开发环境搭建(Windows版本)
前言: 小程序是指微信公众平台小程序,小程序可以帮助开发者快速的开发小程序,小程序可以在微信内被便捷地获取和传播:是一种不需要下载安装即可使用的应用小程序,和原有的三种公众号是并行的体系.2017年1 ...
- Ionic 2+ 安卓环境搭建
安装 安卓studio https://developer.android.com/studio/index.html 设置一个环境变量 _JAVA_OPTIONS:-Xmx512M 添加androi ...
- javascript之原型(prototype)
今天是第一次写博客,写点在javascript中重要的一个概念----原型(prototype): 原型,顾名思义,就是一切事物的模板. 柏拉图在<理想国>卷10中说:"床不是有 ...
- 关于SpringMVC中text/plain的编码导致的乱码问题解决方法
有老铁的项目出现个问题,就是用SpringMVC给前台返回一句话,是String类型的,然后前台接收到是乱码. 然后以为是简单的response的编码问题,就在方法体中开始给response设置编码, ...
- MapReduce执行流程及程序编写
MapReduce 一种分布式计算模型,解决海量数据的计算问题,MapReduce将计算过程抽象成两个函数 Map(映射):对一些独立元素(拆分后的小块)组成的列表的每一个元素进行指定的操作,可以高度 ...
- 快速查询List中指定的数据
时间:2017/5/15 作者:李国君 题目:快速查询List中指定的数据 背景:当List中保存了大量的数据时,用传统的方法去遍历指定的数据肯定会效率低下,有一个方法就是类似于数据库查询那样,根据索 ...
- voa 2015 / 4 / 27
As reports of the death toll rise in Nepal, countries and relief organizations around the world are ...
- 使用 VS2017 和 js 进行桌面程序开发 - electron 之 Hello Word
现在基于 js 和 web浏览器核心构建的 C/S 程序越来越多,比如微信桌面版(基于 duilib 和 cef).VS CODE(基于electron)等,出于了解的目的,最近学习了 electro ...
- Luogu T7152 细胞(递推,矩阵乘法,快速幂)
Luogu T7152 细胞(递推,矩阵乘法,快速幂) Description 小 X 在上完生物课后对细胞的分裂产生了浓厚的兴趣.于是他决定做实验并 观察细胞分裂的规律. 他选取了一种特别的细胞,每 ...
- ASP.NET MVC HttpPostedFileBase文件上传
HttpPostedFileBase文件上传,支持多文件一次上传,如有图片,则支持略缩图保存 文件传输信息封装 /// <summary> /// 文件生成方式 /// </summ ...
