C与Objective-C中的枚举(位移枚举)

来源:互联网 发布:命运知乎 编辑:程序博客网 时间:2024/06/05 09:08

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号|黑体|下划线,用或的方式集成多种状态,再判断某种状态有没有。









2 0
原创粉丝点击