C++11标准扩充了枚举的特性。
枚举只是一种常量命名方式。给常量取一个易懂的名字而已。
几种定义方式:
1、
enum State {
State1,
State2,
State3,
};
enum State aState = State1; //使用
2、
enum State {
State1,
State2,
State3,
};
typedef enum State State;
State aState = State1; //使用
3、
enum State : NSInteger {
State1,
State2,
State3,
}; //使用“底层数据类型”来保存枚举类型的变量,这样做的好处是,可以“向前声明”(在.h文件中声明)枚举变量了。若不指定底层数据类型,则无法向前声明枚举类型,因为编译器不不清楚底层数据类型的大小,所以在用到此枚举类型时,也就不知道究竟该给变量分配多少空间了。
enum State : NSInteger; //向前声明
4、
enum State {
State1 = 1,
State2,
State3,
}; //不使用编译器所分配的序号,手动指定枚举成员所对应的值。
5、
enum State {
State1 = 0,
State2 = 1 << 0,
State3 = 1 << 1,
State3 = 1 << 2,
}; //通过“按位或操作符”来组合,还可以用“按位与操作符”来判断是否已启用某个选项。
例:
enum State aState = State1 | State2;
if (aState && State1) {
}
6、
typedef NS_ENUM(NSUInteger, State){
State1,
State2,
State3,
};
//略:Foundation框架中定义了一些辅助的宏,用来指定用于保存枚举值的底层数据类型。这些宏具备向后兼容能力。
枚举类型在switch语句中的运用:
注意:在处理枚举类型的switch语句中不要实现default分支。这样的话,加入新枚举之后,编译器就会警告提示开发者:swith语句并未处理所有枚举。