iOS开发笔记(十二):位移枚举

在程序设计语言中,通常用一个数值来表明某一状态,这种处理方法不直观,易读性差。若是能在程序中用天然语言中有相应含义的单词来表明某一状态,则程序就很容易阅读和理解。也就是说,事先考虑到某一变量可能取的值,尽可能用天然语言中含义清楚的单词来表示它的每个值,这种方法称为枚举方法,用这种方法定义的类型称枚举类型。算法

定义的枚举类型名称一般与项目的类文件前缀相同,或者是类库框架缩写,或者跟随具体业务名,若是开头是缩写要大写表示,跟随其后的命名应采用驼峰命名法则,命名应准确表述枚举表示的意义,枚举中各个值都应以定义的枚举类型开头,其后跟随各个枚举值对应的状态、选项或者状态码。编程

1.枚举的实现方式

  • 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
      };	
    复制代码

2.举例

// 方法调用
[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");
    }

}
复制代码

3.位移枚举的解释

首先你要知道如下这些知识:code

  1. << 是左移运算符 : 用来将一个数的各二进制位所有左移若干位。io

    举个栗子  :0000 0001 表明 二进制中的 1 
     左移一位    <<1
     就会变成  :0000 0010 表明 二进制中的 2
     简便算法:8 << n的值为8 *(2^n)
    复制代码
  2. 按位与运算 :&程序设计

    1 & 1 = 1;	1 & 0 = 0;	0 & 0 = 0
     总结规则:有0则为0
    复制代码
  3. 按位或运算: |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,依次类推。

综上所述能够解释位移枚举为何能够一个参数能够传递多个值,这也是位移枚举的优势

相关文章
相关标签/搜索