iOS 關於列舉的使用

2021-07-11 12:19:13 字數 2043 閱讀 4677

引言:

列舉它是乙個整形(int)並且,它不參與記憶體的占用和釋放,列舉定義變數即可直接使用,不用初始化.

在**中使用列舉的目的只有乙個,那就是增加**的可讀性.

使用:

列舉的定義如下:

[csharp]view plain

copy

typedef 

enum

test;//列舉名稱

亦可以如下定義(

推薦:結構比較清晰

):[csharp]view plain

copy

typedef ns_enum(nsinteger, test1)  

;  

列舉的定義還支援

位運算的方式定義,如下:

等於號後面必須等於1

[csharp]view plain

copy

typedef ns_enum(nsinteger, test)  

;  

什麼時候要用到這種方式呢?

那就是乙個列舉變數可能要代表多個列舉值的時候. 其實給乙個列舉變數賦予多個列舉值的時候,原理只是把各個列舉值加起來罷了.

當加起來以後,就獲取了乙個新的值,那麼為了保證這個值的唯一性,這個時候就體現了位運算的重要作用.

位運算可以確保列舉值組合的唯一性.

因為位運算的計算方式是將二進位制轉換成十進位制,也就是說,列舉值裡面訪問的是 計算後的十進位制值.

打個比方:

通過上面的位運算方式設定好列舉以後,列印出來的列舉值分別是: 1 2 4 8 16

這5個數字,無論你如何組合在一起,也不會產生兩個同樣的數字.

.所以,用下面這種方式來初始化乙個位運算列舉吧:

[csharp]view plain

copy

typedef ns_enum(

uint

, test)  

;  

多列舉值 賦值方式如下:

[csharp]view plain

copy

test tes = (testa|testb);  

判斷列舉變數是否包含某個固定的列舉值,使用前需要確保列舉值以及各個組合的唯一性:

[csharp]view plain

copy

nslog(@

"%d %d %d %d %d"

,testa,testb,testc,testd,teste);  

test tes = (testa|testb);  

nslog(@"%d"

,tes);  

nslog(@"%d"

,(tes & testa));  

if((tes & testa)) else

nslog(@"%d"

,(tes & testb));  

if((tes & testa)) else

nslog(@"%d"

,(tes & testc));  

if((tes & testc)) else  

如果 沒有包含,將返回0, 0表示false no 則進入else

也可以隨時為列舉變數累加某個值,但是要自己控制不要新增已經加入過的列舉值, 列舉變數的值不會有變動,但這樣將會誤導閱讀**的人

[csharp]view plain

copy

tes |=testc;  

有累加,自然有累減了,如果累減不存在的列舉值, 那麼本次累減的列舉值,會自動累加上去.

[csharp]view plain

copy

tes^= teste;  

iOS 關於列舉的使用

引言 列舉值它是乙個整形 int 並且,它不參與記憶體的占用和釋放,列舉定義變數即可直接使用,不用初始化.在 中使用列舉的目的只有乙個,那就是增加 的可讀性.使用 列舉的定義如下 typedef enum test 列舉名稱 亦可以如下定義 推薦 結構比較清晰 typedef ns enum nsi...

iOS 關於列舉的使用

引言 列舉值它是乙個整形 int 並且,它不參與記憶體的占用和釋放,列舉定義變數即可直接使用,不用初始化.在 中使用列舉的目的只有乙個,那就是增加 的可讀性.使用 列舉的定義如下 csharp view plain copy typedef enum test 列舉名稱 亦可以如下定義 推薦 結構比...

關於列舉的使用

列舉enum是一種特殊的類,使用列舉可以很方便的定義常量。在jdk1.5 之前,我們定義常量都是 public static fianl.這種方式在現在專案中也很常見 現在有了列舉,可以把相關的常量分組到乙個列舉型別裡,而且列舉提供了比常量更多的方法。有的時候乙個類的物件是有限且固定的,這種情況下我...