当前位置: 移动技术网 > IT编程>移动开发>IOS > IOS 枚举 enum

IOS 枚举 enum

2018年07月16日  | 移动技术网IT编程  | 我要评论

风车动漫网,生死狙击第一季,不负妻缘

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

一. OC中,枚举的使用

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

1 /*
2  * 枚举 可以写在@interface 里面
3  **/
4 enum Test{
5     test = 1,
6     test1 = 2,
7 };

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

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

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

 

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

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

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

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

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

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

 

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

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

 1 /*
 2  * 存储类型,表示成员变量的值类型,如NSInteger
 3  * 属性类型,上文说到的 枚举别名,可以此名称调用枚举
 4  * 其中 NS_ENUM 多用于一般枚举,NS_OPTIONS 多用于位移枚举
 5  **/
 6 typedef NS_ENUM(NSInteger,Test6){
 7     test61 = 1,
 8     test62 = 2,
 9 };
10 
11 typedef NS_OPTIONS(NSUInteger, Test7) {
12     TestNone = 0,
13     TestA7 = 1 << 0,
14     TestB7 = 1 << 1,
15     TestC7 = 1 << 2,
16     TestD7 = 1 << 3
17 };

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

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 //错误写法1
 2     enum {
 3         test21 = 1,
 4         test22 = 2,
 5     }Test2;
 6 
 7 //错误写法2
 8     NS_ENUM(NSInteger,Test3){
 9         test31 = 1,
10         test32 = 2,
11     };
12 
13 //错误写法3
14     NS_OPTIONS(NSUInteger, Test4){
15         test41 = 1,
16         test42 = 2,
17     };
18 
19     NS_OPTIONS(NSUInteger, Test5) {
20         TestA = 1 << 0,
21         TestB = 1 << 1,
22         TestC = 1 << 2,
23         TestD = 1 << 3
24     };

 

 

三. 枚举的理解 

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

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

1 #define MON  1
2 #define TUE   2
3 #define WED  3
4 #define THU   4
5 #define FRI    5
6 #define SAT   6
7 #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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网