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_ENUMNS_OPTIONS, 为什么呢? 因为他们除了推断出不同类型的枚举,再就是当编译Objective-C++模式,它们产生的代码是不同的, 就是因为不同所以混编的时候使用enum会报错!

05-11 21:44