欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

IOS 枚举 enum

程序员文章站 2022-05-28 14:06:57
前言:oc中枚举的正确使用,可以增强代码的可读性,减少各种“错误”,让代码更加的规范。下面先介绍枚举的用法,最后介绍个人对枚举的理解,什么是枚举,为什么用枚举。 一. OC中,枚举的使用 1. 写法1格式:关键字 enum 枚举名字{枚举成员,枚举成员2}; 使用方法:enum 枚举名称 变量名称 ......

前言: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