前言:oc中枚举的正确使用,可以增强代码的可读性,减少各种“错误”,让代码更加的规范。下面先介绍枚举的用法,最后介绍个人对枚举的理解,什么是枚举,为什么用枚举。

一. OC中,枚举的使用

1. 写法1格式:关键字 enum 枚举名字{枚举成员,枚举成员2};

 /*
* 枚举 可以写在@interface 里面
**/
enum Test{
test = ,
test1 = ,
};

使用方法:enum 枚举名称 变量名称 = 枚举成员。

 enum Test var = test;
NSLog(@"%u", var);
// 输出值为 1

注意:如果枚举成员不设置值,默认第一个枚举成员值为整型0,后续枚举成员值依次加1。

2.写法2格式,typedef enum 枚举名称{枚举成员}枚举别名;

 /*
定义'枚举类型', Test11 是属性类型 相当于nsstring,int,。。
其中Test1 枚举名字可以省略不写,称“匿名枚举”
**/
typedef enum Test1{
test11 = ,
test12 = ,
}Test11;

使用方法:属性类型 变量名称 = 枚举成员;

 Test11 var1 = test12;
NSLog(@"%u", var1);
// 输出值为 2

注意:typedef enum 定义的枚举,可以理解为枚举类型,相当于nsstring,int等,可用属性类型直接创建变量,然后完成赋值。

这种写法原有的枚举名称可以省略,称“匿名枚举”。

3.写法3,ios6之后,也是最标准的写法,更加的统一,规范。用“NS_ENUM”和“NS_OPTIONS”定义

格式:typedef NS_ENUM(存储类型,属性类型){枚举成员};

 /*
* 存储类型,表示成员变量的值类型,如NSInteger
* 属性类型,上文说到的 枚举别名,可以此名称调用枚举
* 其中 NS_ENUM 多用于一般枚举,NS_OPTIONS 多用于位移枚举
**/
typedef NS_ENUM(NSInteger,Test6){
test61 = ,
test62 = ,
}; typedef NS_OPTIONS(NSUInteger, Test7) {
TestNone = ,
TestA7 = << ,
TestB7 = << ,
TestC7 = << ,
TestD7 = <<
};

使用方法:属性别名 变量名称 = 枚举成员;

Test6 var6 = test62;
NSLog(@"%ld", (long)var6);
// 输出值为 2 Test7 var7 = TestA7 | TestC7;
NSLog(@"%ld", (long)var7);
// 输出值为 5
// 0001 | 0100 = 0101 十进制为5

注意:上面TestC7 1<<2,表示2进制1 左移2位,为0100,与0001 或运算,得到0101,转换十进制为5.

常用枚举用 NS_ENUM,NS_OPTIONS 多用于位移枚举,位的运算(或且非异或等)

二. 枚举错误的写法,编译时不会报错,但是运行报错

 //错误写法1
enum {
test21 = ,
test22 = ,
}Test2; //错误写法2
NS_ENUM(NSInteger,Test3){
test31 = ,
test32 = ,
}; //错误写法3
NS_OPTIONS(NSUInteger, Test4){
test41 = ,
test42 = ,
}; NS_OPTIONS(NSUInteger, Test5) {
TestA = << ,
TestB = << ,
TestC = << ,
TestD = <<
};

三. 枚举的理解

1.oc是基于c语言的,在c语言中枚举的定义

在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是:

 #define MON  1
#define TUE 2
#define WED 3
#define THU 4
#define FRI 5
#define SAT 6
#define SUN 7

这样很繁琐,在此,我们定义一种新的数据类型,希望它能完成同样的工作。这种新的数据类型叫枚举型。

2.枚举用于规范的定义代码中的状态、选项等“常量”。

其中状态与选项的概念区别(states and options)

状态,同时只能有一种,如“OK”,“Error”,不可能同时是OK和Error。
选项,同时可以有一种或一种以上,如App可以同时支持横屏和竖屏,横屏竖屏在这个时候就是“屏幕方向”的两种不同的选项。

总结:

个人觉得枚举还是有必要掌握的,格式清晰,使用简便。能减少代码的冗余度,提高代码规范,增强可读性.

ps:第一次总结,有错误之处还请指正,thanks,荆轲刺秦王~~

参考文档1:https://www.cnblogs.com/JCSU/articles/1299051.html

参考文档2:https://blog.csdn.net/snow_xuey/article/details/55258875

参考文档3:https://blog.csdn.net/imkata/article/details/78861077

IOS 枚举 enum的更多相关文章

  1. iOS 枚举ENUM和OPTIONS的区别

  2. iOS 枚举 初体验

    iOS枚举 我的code /*文件名 SC_CDV_OCR.m*/ typedef enum _OCRResultState { OCRResultStateOK = 1, OCRResultStat ...

  3. MySQL字段之集合(set)枚举(enum)

    MySQL字段之集合(set)枚举(enum) (2008-12-23 13:51:23) 标签:it  分类:MySQL 集合 SET mysql> create table jihe(f1 ...

  4. 枚举 enum

    typedef enum : NSUInteger { <#MyEnumValueA#>, <#MyEnumValueB#>, <#MyEnumValueC#>, ...

  5. 枚举enum学习小记

    参考文献: [1]C++程序设计语言(特别版), 裘宗燕译, 机械工业出版社 [2]C++ Primer (3rd Ed.), S.B. Lippman and J. Lajoie, 人民邮电出版社 ...

  6. Java 枚举(enum) 详解7种常见的用法

    Java 枚举(enum) 详解7种常见的用法 来源 https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的类型— ...

  7. Python 枚举 enum

    Python 枚举 enum enum 标准模块在 3.4 版本才可以使用,3.3 以下版本需要独立安装:https://pypi.python.org/pypi/enum34#downloads,官 ...

  8. 【转】结构struct 联合Union和枚举Enum的细节讨论

    结构struct 联合Union和枚举Enum的细节讨论 联合(Union)是一种构造数据类型,它提供了一种使不同类型数据类型成员之间共享存储空间的方法,同时可以实现不同类型数据成员之间的自动类型转换 ...

  9. 枚举Enum和常量0之间的恩怨

    1,任何为0的常量表达式都能隐式的转换成枚举Enum. 对于这一点,在程序中没少吃苦头.特别是对于函数重载的情况,往往让人一头雾水. 看看下面的代码(摘自MSDN),你能猜到输出吗? public e ...

随机推荐

  1. js原生带缩略图的图片切换效果

    js原生带缩略图的图片切换效果 本例中用到的 moveElement(elementID,final_x,final_y,interval)是来自<JavaScript DOM编程艺术(中文第二 ...

  2. endwith与startwith字符串方法匹配重写

    endwith与startwith字符串方法匹配重写 在js读取文件信息并判断文件的格式类型时出现问题,并找到解决方案,写下来与大家分享,共勉. ---DanlV 描述 本人在上传MP3格式文件时,需 ...

  3. localstorage本地存储的简单使用

    我们在做页面时会用到本地存储的时候,今天说说localStorage本地存储. 1.localStorage.name="老王";      //第一种设置存储本地数据的方法loc ...

  4. 第三次Scrum编码冲刺

    1.小组成员 周 斌 舒 溢 许嘉荣 唐 浩 黄欣欣 廖帅元 刘洋江 薛思汝 2.个人在小组第三次冲刺的任务及其完成情况描述. 这次小组活动中我负责测试程序的实现情况,确保程序的每个模块都能正常运行, ...

  5. WPF&Silverlight5 常用功能差异

    一晃从Wpf转到sl也有半年多了,总想总结一下wpf和sl的差异,今天终于下笔. 首先来个整体图: 通过上图可以发现其实sl只是使用了wpf的一小部分,只是sl依赖的freamwork有很大部分都一样 ...

  6. [uva] 10067 - Playing with Wheels

    10067 - Playing with Wheels 题目页:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Ite ...

  7. 一款可以安利的MarkDown编辑器

    Typeora一款可以安利的MarkDown编辑器 Typeora是什么? ​ 一款使用MarkDown的本地编辑器集结了MarkDown的所有特点并展现了简洁.高效的特点,关键是免费. 特点: 支持 ...

  8. TIAGO机器人传感器参数简介 手册翻译

    本来认为这篇文章是最没人气的,竟然收到了回复,看来要继续更新本文了.留下笔者联系方式,邮箱leop22@163.com,欢迎邮件交流. 防止不良爬虫,原文链接:http://www.cnblogs.c ...

  9. Go语言(三)反射机制

    package main import( "fmt" "reflect" ) func main(){ // iterate through the attri ...

  10. API代理网关和OAuth2.0授权认证框架

    API代理网关和OAuth2.0授权认证框架 https://www.cnblogs.com/bluedoctor/p/8967951.html 1,授权认证与微服务架构 1.1,由不同团队合作引发的 ...