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

2019-04-07  本文已影响0人  Sweet丶

开发中,有时需要给一个枚举变量同时设置几个枚举值如: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--
上一篇 下一篇

猜你喜欢

热点阅读