枚举其实很重要,特别是在应用开发初期,服务器端数据格式需要更改得情况下,枚举和宏都能是程序简洁,并且改动小。

网上有个人写的言简意赅,适合初学

转自:http://blog.csdn.net/ysy441088327/article/details/8012677

题记: 蛋疼的枚举, 千万别小视了! 进入正题: 首先要知道的是,枚举值 它是一个整形(int) 并且,它不参加内存的占用和释放 枚举定义变量即可直接使用,不用初始化. 枚举的定义如下:

typedef enum {

//以下是枚举成员 TestA = 0,

TestB,

TestC,

TestD

}Test;//枚举名称

亦可以如下定义(推荐:结构比较清晰):

typedef NS_ENUM(NSInteger, Test1) {

//以下是枚举成员

Test1A = 0,

Test1B = 1,

Test1C = 2,

Test1D = 3

};

枚举的定义还支持位运算的方式定义,如下: 等于号后面必须等于1

typedef NS_ENUM(NSInteger, Test) {

TestA = 1, //1 1 1

TestB = 1 << 1, //2 2 10 转换成 10进制 2

TestC = 1 << 2, //4 3 100 转换成 10进制 4

TestD = 1 << 3, //8 4 1000 转换成 10进制 8

TestE = 1 << 4 //16 5 10000 转换成 10进制 16

};

什么时候要用到这种方式呢? 那就是一个枚举变量可能要代表多个枚举值的时候. 其实给一个枚举变量赋予多个枚举值的时候,原理只是把各个枚举值加起来罢了. 当加起来以后,就获取了一个新的值,那么为了保证这个值的唯一性,这个时候就体现了位运算的重要作用. 位运算可以确保枚举值组合的唯一性. 因为位运算的计算方式是将二进制转换成十进制,也就是说,枚举值里面存取的是 计算后的十进制值. 打个比方: 通过上面的位运算方式设定好枚举以后,打印出来的枚举值分别是: 1 2 4 8 16 这5个数字,无论你如何组合在一起,也不会产生两个同样的数字.

多枚举值 赋值方式如下:

Test tes = (TestA|TestB);

判断枚举变量是否包含某个固定的枚举值,使用前需要确保枚举值以及各个组合的唯一性:

NSLog(@"%d %d %d %d %d",TestA,TestB,TestC,TestD,TestE);

Test tes = (TestA|TestB); NSLog(@"%d",tes);

NSLog(@"%d",(tes & TestA));

if ((tes & TestA)) { NSLog(@"有"); }

else { NSLog(@"没有"); } NSLog(@"%d",(tes & TestB));

if ((tes & TestA)) { NSLog(@"有"); }

else { NSLog(@"没有"); }

NSLog(@"%d",(tes & TestC));

if ((tes & TestC)) { NSLog(@"有"); }

else { NSLog(@"没有"); }

如果 没有包含,将返回0, 0表示false NO 则进入else 也可以随时为枚举变量累加某个值,但是要自己控制不要添加已经加入过的枚举值, 枚举变量的值不会有变动,但这样将会误导阅读代码的人

有累加,自然有累减了,如果累减不存在的枚举值, 那么本次累减的枚举值,会自动累加上去.

tes^= TestE;

转载于:https://www.cnblogs.com/ejllen/p/3745264.html

iOS enum 定义与使用相关推荐

  1. C++ 笔记(07)— 常量(字面常量、const定义常量、constexpr 定义常量、enum 定义常量、define 定义常量)

    在 C++ 中,常量类似于变量,只是不能修改.与变量一样,常量也占用内存空间,并使用名称标识为其预留的空间的地址,但不能覆盖该空间的内容. 常量可以是任何的基本数据类型,可分为整型数字.浮点数字.字符 ...

  2. iOS宏定义的使用与规范

    2019独角兽企业重金招聘Python工程师标准>>> 宏定义在很多方面都会使用,例如定义高度.判断iOS系统.工具类,还有诸如文件路径.服务端api接口文档.为了对宏能够快速定位和 ...

  3. iOS单例模式定义与使用

    单例模式是iOS开发中常用的一种设计模式,目的在于创建一次对象,多地方使用. 系统中的单例例如:UIApplication. NSUserDefaults 等,开发中我们可以用作用户管理. Objec ...

  4. java enum 定义属性_java enum(枚举)使用详解 + 总结

    enum 的全称为 enumeration, 是 JDK 1.5  中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容: 8. 总结 ...

  5. C#枚举enum定义使用

    1.枚举enum的用途浅例            写程序时,我们常常需要为某个对象关联一组可选alternative属性.例如,学生的成绩分A,B,C,D等,天气分sunny, cloudy, rai ...

  6. ios系统定义的url

    App-prefs:root=WIFI 无线局域网 App-Prefs:root=Bluetooth 蓝牙 App-prefs:root=INTERNET_TETHERING 个人热点 App-pre ...

  7. enum 定义3个属性_和平精英:合金龙骨有3个隐藏属性,比玛莎“水下无敌”还唬人...

    欢迎诸位小伙伴们来到天哥开讲的<和平精英>"精英那点事儿"~接下来呢,咱们聊聊合金龙骨的3个隐藏属性.土豪玩家"自投罗网"以及游戏里的"公 ...

  8. iOS开发-Swift进阶之枚举enum!

    swift进阶总汇 本文主要介绍enum的常见使用形式,以及枚举大小是如何计算的 补充:添加脚本自动生成SIL 通过target -> +,选择 other -> Aggregate,然后 ...

  9. iOS: 枚举类型 enum,NS_ENUM,NS_OPTIONS

    一般情况下,我们采用C风格的enum关键字可以定义枚举类型. enum{ UIViewAnimationTransitionNone,UIViewAnimationTransitionFlipFrom ...

最新文章

  1. OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法...
  2. 全球及中国本质安全校准器行业销售前景与竞争规模预测报告2022-2027年
  3. 一些重要的算法(转)
  4. SpringMVC的数据响应-页面跳转-返回ModelAndView形式2(应用)
  5. python字典循环添加元素_牛鹭学院:学员笔记|python字典、列表、循环
  6. python怎么让py里面逐行运行_怎样在安卓上运行python
  7. NumPy Cookbook 带注释源码 十一、NumPy 的底牌
  8. 服务器虚拟化相关问题分析,服务器虚拟化中遇到的存储问题分析
  9. was java heap_Websphere产生大量javacore与heapdump文件的分析
  10. 我,27岁,程序员,今年无情被辞:该转行还是降薪和年轻人抢饭碗?
  11. Practical Node.js摘录(2018版)第1,2章。
  12. 星环科技TDH基于Overlay网络架构为数据安全保驾护航
  13. 警察抓小偷打字游戏JAVA_警察抓小偷打字游戏金山打字通游戏
  14. ROS系列书籍--机械工业出版社
  15. MySQL高级索引及调优篇
  16. 在MS Word 中添加 Mathtype 插件(vbe6ext.olb不能被加载问题 已解决)
  17. c语言中100m怎么表示,科目三道路驾驶技能和安全文明驾驶常识考试满分分别为100分,成绩分别达到80和90分的为合格。...
  18. 基于MATLAB的拼图游戏设计(图文详解,附完整代码)
  19. 四心圆法画椭圆原理_四心圆法画椭圆的解析画法
  20. 阿里云自定义域名详细过程----hexo博客配置实测详细过程整理之二

热门文章

  1. KernelIoControl和OEMIoControl的分析和使用(作者:wogoyixikexie@gliet)
  2. Access数据库审计工具mdbtools
  3. java io nio socket_通过socket编程掌握IO流 —— NIO
  4. android 启动模式_安卓学习笔记之Android中Activity的4种启动模式
  5. 上海交大情感脑电数据集(SJTU Emotion EEG Dataset,SEED)
  6. eeglab中文教程系列(4)-预处理工具
  7. 搜集的一些项目源码,改改就能用
  8. 基于Android移动终端的微型餐饮管理系统的设计与实现3-技术整合
  9. 自动驾驶系统为何要打上「思想钢印」?北京顺义闹市区里藏着毫末智行的谜底...
  10. 用安卓手机解锁目标检测模型YOLOv5,识别速度不过几十毫秒!