typedef enum {
//以下是枚举成员 TestA = 0,
<wbr><wbr> TestB,<wbr></wbr></wbr></wbr>
<wbr><wbr> TestC,<wbr></wbr></wbr></wbr>
<wbr><wbr>TestD<wbr></wbr></wbr></wbr>
}Test;//枚举名称
亦可以如下定义(推荐:结构比较清晰):
typedef NS_ENUM(NSInteger, Test1) {
//以下是枚举成员
<wbr><wbr> Test1A = 0,</wbr></wbr>
<wbr><wbr> Test1B = 1,</wbr></wbr>
<wbr><wbr> Test1C = 2,</wbr></wbr>
<wbr><wbr> Test1D = 3</wbr></wbr>
};
枚举的定义还支持位运算的方式定义,如下: 等于号后面必须等于1
typedef NS_ENUM(NSInteger, Test) {
<wbr><wbr> TestA = 1, //1 1 1</wbr></wbr>
<wbr><wbr> TestB = 1 << 1, //22 10 转换成 10进制 2</wbr></wbr>
<wbr><wbr> TestC = 1 << 2, //43 100 转换成 10进制 4</wbr></wbr>
<wbr><wbr> TestD = 1 << 3, //84 1000 转换成 10进制 8</wbr></wbr>
<wbr><wbr> TestE = 1 << 4 //165 10000 转换成 10进制 16</wbr></wbr>
};
什么时候要用到这种方式呢? 那就是一个枚举变量可能要代表多个枚举值的时候.其实给一个枚举变量赋予多个枚举值的时候,原理只是把各个枚举值加起来罢了.当加起来以后,就获取了一个新的值,那么为了保证这个值的唯一性,这个时候就体现了位运算的重要作用. 位运算可以确保枚举值组合的唯一性.因为位运算的计算方式是将二进制转换成十进制,也就是说,枚举值里面存取的是 计算后的十进制值. 打个比方:通过上面的位运算方式设定好枚举以后,打印出来的枚举值分别是: 1 2 4 8 16这5个数字,无论你如何组合在一起,也不会产生两个同样的数字.
多枚举值 赋值方式如下:
Test tes = (TestA|TestB);
判断枚举变量是否包含某个固定的枚举值,使用前需要确保枚举值以及各个组合的唯一性:
NSLog(@"%d %d %d %d %d",TestA,TestB,TestC,TestD,TestE);
Test tes = (TestA|TestB); NSLog(@"%d",tes);
NSLog(@"%d",(tes & TestA));
if ((tes & TestA)) { NSLog(@"有"); }
else { NSLog(@"没有"); } NSLog(@"%d",(tes & TestB));
if ((tes & TestA)) { NSLog(@"有"); }
else { NSLog(@"没有"); } <wbr></wbr>
NSLog(@"%d",(tes & TestC));
if ((tes & TestC)) { NSLog(@"有"); }
else { NSLog(@"没有"); }
如果 没有包含,将返回0, 0表示false NO 则进入else也可以随时为枚举变量累加某个值,但是要自己控制不要添加已经加入过的枚举值, 枚举变量的值不会有变动,但这样将会误导阅读代码的人
有累加,自然有累减了,如果累减不存在的枚举值, 那么本次累减的枚举值,会自动累加上去.
<wbr>tes^= TestE; <wbr></wbr></wbr>