1.enum
可以声明一般类型和位掩码(bitmasked)类型
例如:
enum Test{// 一般枚举
TestA,
TestB,
TestC,
};
enum{// 匿名枚举
TestA,
TestB,
TestC,
};
typedef enum _Test
{ // 设置别名
TestA,
TestB,
TestC
} Test;
2.NS_ENUM
声明一般类型, NS_OPTIONS
声明掩码(bitmasked)类型
typedef NS_ENUM(NSInteger, Test)
{
TestA,
TestB,
TestC
};
typedef NS_OPTIONS(NSUInteger, Test) {// <<标识左位移,(1<<1,意思是把左边的1转换成二进制后向左移动1位)
TestA = 1 << 0,
TestB = 1 << 1,
TestC = 1 << 2,
TestD = 1 << 3
};
3.那么问题又来了, 直接用enum
不就可以了? 答案不是这样的, 苹果建议我们在OC中使用NS_ENUM
与NS_OPTIONS
, 为什么呢? 因为他们除了推断出不同类型的枚举,再就是当编译Objective-C++
模式,它们产生的代码是不同的, 就是因为不同所以混编的时候使用enum
会报错!