iOS 位移列舉

2021-07-02 18:26:04 字數 1445 閱讀 9080

之前,我們一般都採用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開發筆記(十二) 位移列舉

在程式語言中,一般用乙個數值來代表某一狀態,這種處理方法不直觀,易讀性差。如果能在程式中用自然語言中有相應含義的單詞來代表某一狀態,則程式就很容易閱讀和理解。也就是說,事先考慮到某一變數可能取的值,盡量用自然語言中含義清楚的單詞來表示它的每乙個值,這種方法稱為列舉方法,用這種方法定義的型別稱列舉型別...