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] 没有t12017-02-10 11:56:01.243 UIKitLearn[2460:69675] 有t32017-02-10 11:56:01.243 UIKitLearn[2460:69675] 没有t52017-02-10 11:56:01.244 UIKitLearn[2460:69675] 有t6当我们对于一个事物的一种属性要用多种状态描述时,比如一行字,是 3号黑体有下划线的,就应该这样 3号|黑体|下划线,用或的方式集成多种状态,再判断某种状态有没有。
新闻热点
疑难解答