您的位置:首页 > 移动开发 > IOS开发

ios开发系列之枚举类型的使用

2015-09-14 19:10 423 查看
枚举值 ,它是一个整形(int) , 并且,它不参与内存的占用和释放,枚举定义变量即可直接使用,不用初始化.

在代码中使用枚举的目的只有一个,那就是增加代码的可读性

enum
是枚举类型,用来定义一系列宏定义常量,相当于一系列的
#define xx xx
,第一个值默认从0 开始,其后依次加一, 可以对每一个枚举元素赋值

typedef enum {
messageTypeMe , // = 0 表示自己
messageTypeOther // = 1 表示对方
}messageType;


messgeType type
type
的值只有0 和 1, 我们可以通过
type
的值来进行控制x的值

int x = type == messageTypeMe ? 100 : 200 ;


枚举的定义还支持位运算的方式定义,如下:

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

什么时候要用到这种方式呢?

那就是一个枚举变量可能要代表多个枚举值的时候. 其实给一个枚举变量赋予多个枚举值的时候,原理只是把各个枚举值加起来罢了.当加起来以后,就获取了一个新的值,那么为了保证这个值的唯一性,这个时候就体现了位运算的重要作用.

位运算可以确保枚举值组合的唯一性

因为位运算的计算方式是将二进制转换成十进制,也就是说,枚举值里面存取的是 计算后的十进制值.打个比方:通过上面的位运算方式设定好枚举以后,打印出来的枚举值分别是: 1 2 4 8 16 这5个数字,无论你如何组合在一起,也不会产生两个同样的数字.

NS_OPTIONS
一般用来定义位运算的枚举值

NS_ENUM
是通用情况,两者本质一样

typedef NS_ENUM(NSInteger,UIButtonType){ };相当于typedef enum {  }UIButtonType;


下面是系统文件的两种不同的枚举写法

typedef NS_ENUM(NSInteger, UIButtonType) {
UIButtonTypeCustom = 0,                         // no button type
UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS(7_0),  // standard system button

UIButtonTypeDetailDisclosure,
UIButtonTypeInfoLight,
UIButtonTypeInfoDark,
UIButtonTypeContactAdd,

UIButtonTypeRoundedRect = UIButtonTypeSystem,   // Deprecated, use UIButtonTypeSystem instead
};


typedef NS_OPTIONS(NSUInteger, UIControlState) {
UIControlStateNormal       = 0,
UIControlStateHighlighted  = 1 << 0,                  // used when UIControl isHighlighted is set
UIControlStateDisabled     = 1 << 1,
UIControlStateSelected     = 1 << 2,                  // flag usable by app (see below)
UIControlStateApplication  = 0x00FF0000,              // additional flags available for application use
UIControlStateReserved     = 0xFF000000               // flags reserved for internal framework use
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: