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,依次類推。

綜上所述能夠解釋位移枚舉爲何能夠一個參數能夠傳遞多個值,這也是位移枚舉的優勢

相關文章
相關標籤/搜索