NS_ENUM
typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
UITableViewCellStyleDefault,
UITableViewCellStyleValue1,
UITableViewCellStyleValue2,
UITableViewCellStyleSubtitle
};
NS_ENUM 的第一個參數(shù)是用于存儲的新類型的類型驻右。在64位環(huán)境下宽堆,UITableViewCellStyle 和 NSInteger 一樣有8bytes長切黔。你要保證你給出的所有值能被該類型容納,否則就會產(chǎn)生錯誤涡匀。第二個參數(shù)是新類型的名字星压。大括號里面和以前一樣践剂,是你要定義的各種值。
這種實現(xiàn)方法提取了之前各種不同實現(xiàn)的優(yōu)點娜膘,甚至有提示編輯器在進行 switch 判斷時檢查類型匹配的功能逊脯。
NS_OPTIONS
enum 也可以被定義為按位掩碼(bitmask)。
用簡單的OR (|)和AND (&)數(shù)學(xué)運算即可實現(xiàn)對一個整型值的編碼竣贪。
每一個值不是自動被賦予從0開始依次累加1的值军洼,而是手動被賦予一個帶有一個bit偏移量的值:類似1 << 0、 1 << 1演怎、 1 << 2等匕争。
語法和 NS_ENUM 完全相同,但這個宏提示編譯器值是如何通過位掩碼 | 組合在一起的爷耀。同樣的汗捡,注意值的區(qū)間不要超過所使用類型的最大容納范圍。
定義:
//NS_OPTIONS畏纲,定義選項
typedef NS_OPTIONS(NSUInteger, MyOption) {
MyOptionNone = 0, //0000, 0
MyOption1 = 1 << 0, //0001, 1
MyOption2 = 1 << 1, //0010, 2
MyOption3 = 1 << 2, //0100, 4
MyOption4 = 1 << 3, //1000, 8
};
使用:
//聲明定義枚舉變量
MyOption option = MyOption1 | MyOption2;//0001 | 0010 = 0011,3
//檢查是否包含某選型
if ( option & MyOption3 ){ //0011 & 0100 = 0000
//包含MyOption3
}else{
//不包含MyOption3
}
//增加選項:
option = option | MyOption4;//0011 | 1000 = 1011, 11
//減少選項
option = option & (~MyOption4);//1011 & (~1000) = 1011 & 0111 = 0011, 3