在iOS開發(fā)中枚舉大家用得最多的應(yīng)該是NS_ENUM玛荞。
NS_ENUM也沒什么好講的娇掏。主要來講講位枚舉NS_OPTIONS。
NS_ENUM和NS_OPTIONS本質(zhì)是一樣的勋眯。
NS_ENUM是通用情況婴梧,NS_OPTIONS一般用來定義具有位移操作或特點(diǎn)的情況。
二進(jìn)制位操作
位操作 | 解釋 | |
---|---|---|
&與 | 有0則0 | |
l 或 | 有1則1 |
NS_OPTIONS位枚舉的特點(diǎn)是可以使用位運(yùn)算來處理枚舉值客蹋,實(shí)際使用中可以用一個(gè)變量存儲多個(gè)枚舉值塞蹭,表示互不影響的多個(gè)設(shè)置。
比如系統(tǒng)中的UIViewAutoresizing定義如下嚼酝。
enum UIViewAutoresizing {
UIViewAutoresizingNone = 0, // 000000
UIViewAutoresizingFlexibleLeftMargin = 1 << 0, // 000001
UIViewAutoresizingFlexibleWidth = 1 << 1,// 000010
UIViewAutoresizingFlexibleRightMargin = 1 << 2,// 000100
UIViewAutoresizingFlexibleTopMargin = 1 << 3,// 001000
UIViewAutoresizingFlexibleHeight = 1 << 4,// 010000
UIViewAutoresizingFlexibleBottomMargin = 1 << 5,// 100000
}
一般如下寫法浮还,實(shí)現(xiàn)了變量保存多個(gè)枚舉值
UIViewAutoresizing resizing =
UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
UIViewAutoresizing resizing = 000010 |010000 = 010010
可以用 & 判斷是否包含
第一種情況
if (resizing & UIViewAutoresizingFlexibleWidth) {
// UIViewAutoresizingFlexibleWidth is set
}
等價(jià)于
if (010010 & 000010) {
// UIViewAutoresizingFlexibleWidth is set
}
010010 & 000010 = 000010 很明顯不等于0,所以為YES闽巩。
第二種情況
if (resizing & UIViewAutoresizingFlexibleTopMargin) {
// UIViewAutoresizingFlexibleTopMargin is set
}
等價(jià)于
if (010010 & 001000) {
// UIViewAutoresizingFlexibleTopMargin is set
}
010010 & 001000 = 0很明顯等于0钧舌,所以為NO