在程序设计语言中,通常用一个数值来表明某一状态,这种处理方法不直观,易读性差。若是能在程序中用天然语言中有相应含义的单词来表明某一状态,则程序就很容易阅读和理解。也就是说,事先考虑到某一变量可能取的值,尽可能用天然语言中含义清楚的单词来表示它的每个值,这种方法称为枚举方法,用这种方法定义的类型称枚举类型。算法
定义的枚举类型名称一般与项目的类文件前缀相同,或者是类库框架缩写,或者跟随具体业务名,若是开头是缩写要大写表示,跟随其后的命名应采用驼峰命名法则,命名应准确表述枚举表示的意义,枚举中各个值都应以定义的枚举类型开头,其后跟随各个枚举值对应的状态、选项或者状态码。编程
C语言枚举框架
typedef enum {
GHTypeUp,
GHTypeDown,
}GHType;
复制代码
OC枚举: 强烈建议你们在平常编程中使用 OC 枚举spa
typedef NS_ENUM(NSUInteger, GHDemoType) {
GHDemoTypeUp,
GHDemoTypeDown
};
复制代码
位移枚举: 用于多值判断设计
typedef NS_OPTIONS(NSUInteger, GHOpertionType) {
GHOpertionTypeUp = 1<<0,
GHOpertionTypeDown = 1<<1,
GHOpertionTypeLeft = 1<<2,
GHOpertionTypeRight = 1<<3
};
复制代码
// 方法调用
[self demo:GHOpertionTypeUp | GHOpertionTypeDown | GHOpertionTypeLeft | GHOpertionTypeRight];
复制代码
// 方法实现
- (void)demo:(GHOpertionType)type {
if (type & GHOpertionTypeUp) {
NSLog(@"GHOpertionTypeUp");
}
if (type & GHOpertionTypeDown) {
NSLog(@"GHOpertionTypeDown");
}
if (type & GHOpertionTypeLeft) {
NSLog(@"GHOpertionTypeLeft");
}
if (type & GHOpertionTypeRight) {
NSLog(@"GHOpertionTypeRight");
}
}
复制代码
首先你要知道如下这些知识:code
<< 是左移运算符 : 用来将一个数的各二进制位所有左移若干位。io
举个栗子 :0000 0001 表明 二进制中的 1
左移一位 <<1
就会变成 :0000 0010 表明 二进制中的 2
简便算法:8 << n的值为8 *(2^n)
复制代码
按位与运算 :&程序设计
1 & 1 = 1; 1 & 0 = 0; 0 & 0 = 0
总结规则:有0则为0
复制代码
按位或运算: |class
1 | 1 = 1; 1 | 0 = 1; 0 | 0= 0
总结规则: 有1则为1
复制代码
以上能够推导出:变量
GHOpertionTypeUp : 0000 0001
GHOpertionTypeDown : 0000 0010
GHOpertionTypeLeft : 0000 0100
GHOpertionTypeRight : 0000 1000
复制代码
由第三点咱们可知,GHOpertionTypeUp | GHOpertionTypeDown | GHOpertionTypeLeft | GHOpertionTypeRight 进行按位或运算后的结果为 : 0000 1111,再根据第二点,此值和GHOpertionTypeUp 进行按位与运算时获得的结果为 : 0000 0001,结果不为 0,也就会打印出 GHOpertionTypeUp,依次类推。
综上所述能够解释位移枚举为何能够一个参数能够传递多个值,这也是位移枚举的优势。