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

枚举值 ,它是一个整形(int) , 并且,它不参与内存的占用和释放,枚举定义变量即可直接使用,不用初始化.
在代码中使用枚举的目的只有一个,那就是增加代码的可读性

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

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

messgeType typetype的值只有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
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值