標籤:class feed integer 多個 輸出 區別 cat 十六進位 0x03
1.什麼是枚舉?
枚舉其實就是一個整型常數的集合,最簡單的例子就是表示星期的SUN, MON, TUE, WED, THU, FRI,SAT, 就是一個枚舉。
2.iOS中枚舉的使用
在ObjC中可以使用C語言的方式進行枚舉,其實ObjC的枚舉就是在C語言上演化而來,先瞭解C語言定義一個枚舉的方式有助於我們對枚舉的理解。
下面我們定義一個枚舉類型Animal,形式為 enum 枚舉名{ 枚舉值表 }; 我們在名為Animal的枚舉中申明了多個成員名,我們可以看作是整形常量的別名。我們把cat賦值為1,系統會
預設為後續枚舉成員的值在前一個成員上加1。當然枚舉成員的值我們也可以自訂,例如我們可以為cat賦值為50,dog賦值為100,所有的賦值關鍵就是讓編程人員容易讀懂和理解。
- enum:關鍵字用於聲明枚舉
- 在枚舉中不能出現同名的枚舉成員和枚舉類型
//枚舉類型的定義enum Animal{ cat=1, dog, pig, bee, monkey, elephant , butterfly};
enum Animal animal = cat;//聲明Animal枚舉型的枚舉變數
我們也可以同時聲明枚舉類型和枚舉型變數,下面第一種定義方式沒有定義枚舉的類型,但是聲明了枚舉變數workday。 第二中分別定義了枚舉類型enum week和變數days。
//類型定義與變數聲明同時進行enum //跟第一個定義不同的是,此處的類型標號省略,這是允許的。{ saturday, sunday = 0, monday, tuesday, wednesday, thursday, friday} workday; //變數workday
enum week { Mon=1, Tue, Wed, Thu, Fri ,Sat, Sun} days; //變數days的類型為枚舉型enum week
用typedef關鍵字將枚舉類型定義成別名,並利用該別名進行變數聲明,下面例子中我們將enum Car定義成別名Car。
typedef enum Car
{ //以下是枚舉成員 BMW = 0, Benz, Ferrari, Royce}Car;//枚舉名稱Car car;//聲明Car類型的變數
typedef enum //可以省略enum Car中的Car{ //以下是枚舉成員 BMW = 0, Benz, Ferrari, Royce}Car;//枚舉名稱
Car car;//聲明Car類型的變數
在iOS中主要蘋果推薦用NS_ENUM,NS_OPTIONS 兩種方式去聲明一個枚舉。
NS_ENUM
聲明一般類型, NS_OPTIONS
聲明掩碼(bitmasked)類型
下面使用NS_OPTIONS掩碼類型進行聲明枚舉,形式為 typedef NS_OPTIONS(枚舉成員類型,枚舉類型名稱){枚舉成員...};
"<<"是左移運算子,"1 << 0"表示1左移0位。在二進位中,左移意味著對應的十進位數乘2。
好處:我們在枚舉值中看見<<
那我們就可以通過|
(位元運算符:或)進行組合!如:下面黃色標註的指派陳述式。
//NS_OPTIONS:是用來聲明位元遮罩(bitmasked)typedef NS_OPTIONS(NSInteger,MyCatEvent) { CatNone = 0, CatWalk = 1 << 0, // <<表示左移運算子 表示0001 CatJump = 1 << 1, CatBark = 1 << 2, CatEat = 1 << 3, CatSleep = 1 << 4, CatDaily = CatWalk | CatJump};
通過&
進行判斷我們來看看輸出結果如:
我們可以看到我們定義的CatWalk值為1,CatJump為2,所以或運算的value值為3。在列印語句中,我們用value對所有的枚舉成員進行與運算。我們可以通過輸出的值來判斷value
包含哪些枚舉成員。結果為0表示不包含,結果為1對應catwalk,以此類推。
用NS_ENUM聲明一般類型,下面聲明了兩種枚舉類型,類型成員分別賦值十進位數和十六進位數。
為什麼要用兩種不同的方式呢?本質上這兩種方式並沒有什麼區別,但是16進位的數更容易對轉換到2進位,當我們需要對枚舉成員做與、或運算時更加的方便。
//NS_ENUM:是用來聲明一般的NSInteger(下面代碼使用NSInteger)類型的枚舉typedef NS_ENUM(NSInteger,MyBoyEvent){ BoyFeedCat = 0, BoyWalkCat = 1,};
//十六進位枚舉typedef NS_ENUM(NSInteger,DailyEvent){ DailyNone = 0x00, DailyRead = 0x01, DailyWrite = 0x02, DailySing = 0x03, DailyShopping = 0x04,};
以上如果有任何錯誤,希望大家指正。
更多的iOS筆記可以來到我的部落格:tianxianbob.com 交流
參考連結:http://www.cnblogs.com/JCSU/articles/1299051.html
http://www.jianshu.com/p/97e582fe89f3
iOS枚舉的運用