iOS 列舉型別使用

2021-06-25 10:33:39 字數 2043 閱讀 6995

引言:

列舉它是乙個整形(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開發 列舉型別使用

一般情況下,我們採用c風格的enum關鍵字可以定義列舉型別。enum uiviewanimationtransition typedef 的作用是宣告別名 typedef nsuinteger uiviewautoresizing 使用nsuinteger的地方可以使用uiviewautoresiz...

iOS 列舉型別

一.定義 typedef enumtypes 在結尾時,使用分號來結束 enum相當於 define的用法,只是相對來說簡單一些。使用了enum之後,在使用時,該型別的變數值只能在enum定義裡面選取。二.如何使用 我們最終的目的,是要把學習的內容在自己寫 的時候融入進去,那麼在用的時候是怎麼用的呢...

ios開發系列之列舉型別的使用

列舉值 它是乙個整形 int 並且,它不參與記憶體的占用和釋放,列舉定義變數即可直接使用,不用初始化.在 中使用列舉的目的只有乙個,那就是增加 的可讀性 enum是列舉型別,用來定義一系列巨集定義常量,相當於一系列的 define xx xx,第乙個值預設從0 開始,其後依次加一,可以對每乙個列舉元...