自定义枚举,使之可以进行或运算

开发中,有时需要给一个枚举变量同时设置几个枚举值如:kvo的NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld。那么要使定义的枚举能支持这样操作,需要什么规则呢?

  1. 在读取时能够从值中判断出包含了哪几个值。
  2. 在给枚举变量设置值时使用位运算 “|”。
  3. 从2可以得知,需要在定义枚举时,各个枚举值要在不同的位域。
    即同时设置的那几个枚举值是在不同的位域,这样在进行或运算时互不干扰。
  4. 根据3中的结果,在取值时进行相应位域的“&”运算即可知道该位上的值

例子:

typedef enum {
    MyOptons1 = 1<<0,  // 1左移0位:0b0001
    MyOptons2 = 1<<1,  // 1左移1位:0b0010
    MyOptons3 = 1<<2,  // 1左移2位:0b0100
    MyOptons4 = 1<<3   // 1左移3位:0b1000
} MyOptons;

// 设置值
MyOptons option = MyOptons1 | MyOptons2 | MyOptons4;

// 读取值
if (option & MyOptons1) {
    NSLog(@"包含MyOptons1--");
}
if (option & MyOptons2) {
    NSLog(@"包含MyOptons2--");
}
if (option & MyOptons3) {
    NSLog(@"包含MyOptons3--");
}
if (option & MyOptons4) {
    NSLog(@"包含MyOptons4--");
}

// 上面代码执行的结果是如下: ---- 完全正确
包含MyOptons1--
包含MyOptons2--
包含MyOptons4--
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容