在iOS开发中枚举大家用得最多的应该是NS_ENUM。
NS_ENUM也没什么好讲的。主要来讲讲位枚举NS_OPTIONS。
NS_ENUM和NS_OPTIONS本质是一样的。
NS_ENUM是通用情况,NS_OPTIONS一般用来定义具有位移操作或特点的情况。
二进制位操作
位操作 | 解释 | |
---|---|---|
&与 | 有0则0 | |
l 或 | 有1则1 |
NS_OPTIONS位枚举的特点是可以使用位运算来处理枚举值,实际使用中可以用一个变量存储多个枚举值,表示互不影响的多个设置。
比如系统中的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
}
一般如下写法,实现了变量保存多个枚举值
UIViewAutoresizing resizing =
UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
UIViewAutoresizing resizing = 000010 |010000 = 010010
可以用 & 判断是否包含
第一种情况
if (resizing & UIViewAutoresizingFlexibleWidth) {
// UIViewAutoresizingFlexibleWidth is set
}
等价于
if (010010 & 000010) {
// UIViewAutoresizingFlexibleWidth is set
}
010010 & 000010 = 000010 很明显不等于0,所以为YES。
第二种情况
if (resizing & UIViewAutoresizingFlexibleTopMargin) {
// UIViewAutoresizingFlexibleTopMargin is set
}
等价于
if (010010 & 001000) {
// UIViewAutoresizingFlexibleTopMargin is set
}
010010 & 001000 = 0很明显等于0,所以为NO
网友评论