在程式語言中,一般用乙個數值來代表某一狀態,這種處理方法不直觀,易讀性差。如果能在程式中用自然語言中有相應含義的單詞來代表某一狀態,則程式就很容易閱讀和理解。也就是說,事先考慮到某一變數可能取的值,盡量用自然語言中含義清楚的單詞來表示它的每乙個值,這種方法稱為列舉方法,用這種方法定義的型別稱列舉型別。
定義的列舉型別名稱通常與專案的類檔案字首相同,或者是類庫框架縮寫,或者跟隨具體業務名,如果開頭是縮寫要大寫表示,跟隨其後的命名應採用駝峰命名法則,命名應準確表述列舉表示的意義,列舉中各個值都應以定義的列舉型別開頭,其後跟隨各個列舉值對應的狀態、選項或者狀態碼。
同時只能有一種,如」jfstateerror」,」jfstateunknow」,不可能同時是jfstateerror和jfstateunknow。如下
typedef enum
jfstate jfstate;
另外,我們經常在switch語句中使用列舉來表示各個狀態,根據各個狀態來進項判斷。如下
jfstate state = jfstateok;
switch (state)
break;
case jfstateerror:
break;
case jfstateunknow:
break;
}
定義選項的時候。若這些選項可以彼此組合,則更應如此。只要列舉定義得對,各選項之間就可通過「按位或操作符」(bitwise or operator)來組合。例如,ios ui框架中有如下列舉型別,用來表示某個檢視應該如何在水平或垂直方向上調整大小。
使用列舉定義選項,每個選項均可啟用或禁用,使用上述方式來定義列舉值,每個列舉值所對應的二進位制表示中,只有1個二進位制位的值是1。用「按位或操作符」可組合多個選項。
用 | 來隔開
首先來補充下位運算的知識吧 ^_^
1、按位與」&」
只有對應的兩個二進位均為1時,結果位才為1,否則為02、按位或」|」比如9&5,其實就是1001&0101=0001,因此9&5=1
二進位制中,與1相&就保持原位,與0相&就為0
只要對應的二個二進位有乙個為1時,結果位就為1,否則為0。3、左移<<比如9|5,其實就是1001|0101=1101,因此9|5=13
把整數a的各二進位全部左移n位,高位丟棄,低位補0。左移n位其實就是乘以2的n次方。列舉定義如下:例如1<<2 就是0001左移2為0100,因此1<<2=4
typedef ns_options(nsuinteger, actiontype) ;
列舉判斷處理:
- (void)action:(actiontype)type
if ((type & actiontypeup) == actiontypeup)
if ((type & actiontypedown) == actiontypedown)
if ((type & actiontypeleft) == actiontypeleft)
if ((type & actiontyperight) == actiontyperight)
}
於是,呼叫的時候我們通常這麼寫
actiontype type = actiontypeup | actiontypeleft | actiontyperight | actiontypedown; // 15
[self action:type];
1、定義這個actiontype的選項為四個,這裡按位異或,0001|0010|0100|1000=1111,得到結果這個type為15。
2、呼叫方法[self action:type],進行按位與操作:type & actiontypeup,1111&0001=0001,得到這個是否選擇了該選項。然後便可以進行判斷了。
iOS 位移列舉
之前,我們一般都採用c語言的方式定義列舉,這種列舉可以稱為普通的列舉。typedef enum directiontype 但是我們在檢視蘋果的sdk或者看一些第三方庫時會像下面這樣定義列舉。比如sdwebimage 中這樣定義列舉,這稱為位移列舉。下面我結合實際應用,說明一下 位移列舉 impor...
位移列舉詳情
列舉 在數學和電腦科學理論中,乙個集的列舉是列出某些有窮序列集的所有成員的程式,或者是一種特定型別物件的計數。這兩種型別經常 但不總是 重疊。1 是乙個被命名的整型常數的集合,列舉在日常生活中很常見,例如表示星期的sunday monday tuesday wednesday thursday fr...
iOS開發筆記(十二) 位移列舉
在程式語言中,一般用乙個數值來代表某一狀態,這種處理方法不直觀,易讀性差。如果能在程式中用自然語言中有相應含義的單詞來代表某一狀態,則程式就很容易閱讀和理解。也就是說,事先考慮到某一變數可能取的值,盡量用自然語言中含義清楚的單詞來表示它的每乙個值,這種方法稱為列舉方法,用這種方法定義的型別稱列舉型別...