oc基础

NS_ENUM和NS_OPTIONS

2016-12-14  本文已影响29人  SoDoIt

NS_ENUM

typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
UITableViewCellStyleDefault,
UITableViewCellStyleValue1,
UITableViewCellStyleValue2,
UITableViewCellStyleSubtitle
};

NS_ENUM 的第一个参数是用于存储的新类型的类型。在64位环境下,UITableViewCellStyle 和 NSInteger 一样有8bytes长。你要保证你给出的所有值能被该类型容纳,否则就会产生错误。第二个参数是新类型的名字。大括号里面和以前一样,是你要定义的各种值。
这种实现方法提取了之前各种不同实现的优点,甚至有提示编辑器在进行 switch 判断时检查类型匹配的功能。

NS_OPTIONS

enum 也可以被定义为按位掩码(bitmask)。
用简单的OR (|)和AND (&)数学运算即可实现对一个整型值的编码。
每一个值不是自动被赋予从0开始依次累加1的值,而是手动被赋予一个带有一个bit偏移量的值:类似1 << 0、 1 << 1、 1 << 2等。

语法和 NS_ENUM 完全相同,但这个宏提示编译器值是如何通过位掩码 | 组合在一起的。同样的,注意值的区间不要超过所使用类型的最大容纳范围。

定义:

//NS_OPTIONS,定义选项
typedef NS_OPTIONS(NSUInteger, MyOption) {
    MyOptionNone = 0,       //0000,   0
    MyOption1 = 1 << 0,     //0001,   1
    MyOption2 = 1 << 1,     //0010,   2
    MyOption3 = 1 << 2,     //0100,   4
    MyOption4 = 1 << 3,     //1000,   8
};

使用:

    //声明定义枚举变量
    MyOption option = MyOption1 | MyOption2;//0001 | 0010 = 0011,3
    //检查是否包含某选型
    if ( option & MyOption3 ){ //0011 & 0100 = 0000
        //包含MyOption3
    }else{
        //不包含MyOption3
    }
    //增加选项:
    option = option | MyOption4;//0011 | 1000 = 1011, 11
    //减少选项
    option = option & (~MyOption4);//1011 & (~1000) = 1011 & 0111 = 0011, 3
上一篇 下一篇

猜你喜欢

热点阅读