在程序設計語言中,通常用一個數值來表明某一狀態,這種處理方法不直觀,易讀性差。若是能在程序中用天然語言中有相應含義的單詞來表明某一狀態,則程序就很容易閱讀和理解。也就是說,事先考慮到某一變量可能取的值,儘可能用天然語言中含義清楚的單詞來表示它的每個值,這種方法稱爲枚舉方法,用這種方法定義的類型稱枚舉類型。算法
定義的枚舉類型名稱一般與項目的類文件前綴相同,或者是類庫框架縮寫,或者跟隨具體業務名,若是開頭是縮寫要大寫表示,跟隨其後的命名應採用駝峯命名法則,命名應準確表述枚舉表示的意義,枚舉中各個值都應以定義的枚舉類型開頭,其後跟隨各個枚舉值對應的狀態、選項或者狀態碼。編程
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,依次類推。
綜上所述能夠解釋位移枚舉爲何能夠一個參數能夠傳遞多個值,這也是位移枚舉的優勢。