之前,我們一般都採用c語言的方式定義列舉,這種列舉可以稱為普通的列舉。
typedef enum directiontype;
但是我們在檢視蘋果的sdk或者看一些第三方庫時會像下面這樣定義列舉。比如sdwebimage**中這樣定義列舉,這稱為位移列舉。
下面我結合實際應用,說明一下「位移列舉」。
#import "viewcontroller.h"
// 因為"位運算"的計算方式是將二進位制轉換成十進位制,也就是說,列舉值裡面訪問的是計算後的十進位制值.
typedef ns_options(nsuinteger, directiontype) ;
@inte***ce viewcontroller ()
@end
@implementation viewcontroller
- (void)viewdidload
- (void)demotest:(directiontype)options
if (options & directiontypeleft)
if (options & directiontypedown)
if (options & directiontyperight)
/*所以最後列印: 向上 向左 向右
其實,"位移列舉"是c語言中遺留下來的一種很古老並且好用的技術延用至今。只需要定義乙個引數,就可以通過傳入不同的列舉組合,達到我們想要的效果。所以蘋果在ios6和mac os 10.8以後引入了兩個巨集ns_options 和ns_enum
來定義列舉型別,實際上是將enum定義和typedef合二為一,ns_enum和ns_options本質是一樣的,僅僅從字面上來區分其用途,採用不同的巨集來從**角度來區分。
我們可以參考uikit.framework的標頭檔案,可以看到大量的列舉定義。
ns_options :一般用來定義位移相關操作的列舉值。
ns_enum: 一般用來定義普通的列舉。
typedef ns_enum(nsinteger, uiviewanimationtransition) ;
typedef ns_options(nsuinteger, uiviewautoresizing) ;
參考資料 :
iOS列舉(位移列舉)
在程式語言中,一般用乙個數值來代表某一狀態,這種處理方法不直觀,易讀性差。如果能在程式中用自然語言中有相應含義的單詞來代表某一狀態,則程式就很容易閱讀和理解。也就是說,事先考慮到某一變數可能取的值,盡量用自然語言中含義清楚的單詞來表示它的每乙個值,這種方法稱為列舉方法,用這種方法定義的型別稱列舉型別...
位移列舉詳情
列舉 在數學和電腦科學理論中,乙個集的列舉是列出某些有窮序列集的所有成員的程式,或者是一種特定型別物件的計數。這兩種型別經常 但不總是 重疊。1 是乙個被命名的整型常數的集合,列舉在日常生活中很常見,例如表示星期的sunday monday tuesday wednesday thursday fr...
iOS開發筆記(十二) 位移列舉
在程式語言中,一般用乙個數值來代表某一狀態,這種處理方法不直觀,易讀性差。如果能在程式中用自然語言中有相應含義的單詞來代表某一狀態,則程式就很容易閱讀和理解。也就是說,事先考慮到某一變數可能取的值,盡量用自然語言中含義清楚的單詞來表示它的每乙個值,這種方法稱為列舉方法,用這種方法定義的型別稱列舉型別...