1.在C语言
中我们用到一串有关联,被当作判断状态依据的常量时,会用到枚举Enum,其使用:
enum week{
Mon,
Tues,
Wed,
Thurs,
Fri,
Sat,
Sun
};
默认情况Mon = 0;后面依次加1,也可以自己指定:
enum week{
Mon = 1,
Tues,
Wed,
Thurs,
Fri,
Sat,
Sun
};
这样Mon = 1;后面依然依次加1.
2.在Objective-C
中,因为版本,有几种实用枚举的样式。
使用C语言样式:
enum test{
t1,
t2
}tt;
switch (tt) {
case t1:
NSLog(@"t1");
break;
case t2:
NSLog(@"t2");
break;
default:
break;
}
感觉用起来很不爽,那么:
typedef enum{
t1,
t2
}test;
test tt;
switch (tt) {
case t1:
NSLog(@"t1");
break;
case t2:
NSLog(@"t2");
break;
default:
break;
}
还是不够OC:
typedef NS_ENUM(NSInteger,test){
t1,
t2
};
test tt;
switch (tt) {
case t1:
NSLog(@"t1");
break;
case t2:
NSLog(@"t2");
break;
default:
break;
}
嗯,这回就非常OC了,推荐这样使用
3.按位位移枚举
typedef NS_ENUM(NSInteger,test){
t1 = 1, //1 对应2进制 1 左移低位0补齐
t2 = 1<<1, //2 10
t3 = 1<<2, //4 100
t4 = 1<<3, //8 1000
t5 = 1<<4, //16 10000
t6 = 1<<5 //32 100000
};
NSLog(@"t1 = %ld",t1);
NSLog(@"t2 = %ld",t2);
NSLog(@"t3 = %ld",t3);
NSLog(@"t2 = %ld",t4);
NSLog(@"t3 = %ld",t5);
NSLog(@"t3 = %ld",t6);
输出结果为1,2,4,8,16,32 。
那么什么情况用这种枚举呢?先上代码:
typedef NS_ENUM(NSInteger,test){
t1 = 1, //1 对应2进制 1 左移低位0补齐
t2 = 1<<1, //2 10
t3 = 1<<2, //4 100
t4 = 1<<3, //8 1000
t5 = 1<<4, //16 10000
t6 = 1<<5 //32 100000
};
test tt= (t3|t6);
if((tt&t1)){
NSLog(@"有t1");
}else{
NSLog(@"没有t1");
}
if((tt&t3)){
NSLog(@"有t3");
}else{
NSLog(@"没有t3");
}
if((tt&t5)){
NSLog(@"有t5");
}else{
NSLog(@"没有t5");
}
if((tt&t6)){
NSLog(@"有t6");
}else{
NSLog(@"没有t6");
}
输出结果为:
2017-02-10 11:56:01.243 UIKitLearn[2460:69675] 没有t1
2017-02-10 11:56:01.243 UIKitLearn[2460:69675] 有t3
2017-02-10 11:56:01.243 UIKitLearn[2460:69675] 没有t5
2017-02-10 11:56:01.244 UIKitLearn[2460:69675] 有t6
当我们对于一个事物的一种属性要用多种状态描述时,比如一行字,是 3号黑体有下划线的,就应该这样 3号|黑体|下划线,用或的方式集成多种状态,再判断某种状态有没有。