引言:
列舉值它是乙個整形(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 開始,其後依次加一,可以對每乙個列舉元...