美文网首页
自定义枚举,使之可以进行或运算

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

作者: Sweet丶 | 来源:发表于2019-04-07 22:44 被阅读0次

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

相关文章

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

    开发中,有时需要给一个枚举变量同时设置几个枚举值如:kvo的NSKeyValueObservingOptionNe...

  • swift中的枚举使用问题

    在OC中,当遇到可以进行位运算的枚举值时,可以使用|(或运算符组合多个枚举值) 比如这种类型NSStringDra...

  • iOS-枚举类型为什么要用<<

    在枚举中我们经常看到<<这样的位运算符。如果我们在枚举中看到<<那我们就可以通过|(位运算符:或)进行组合使用: ...

  • Swift运算符重载介绍

    1、简介 Swift中类或结构体可以对已有的运算符进行自定义实现,赋予另外一种功能。可以成为运算符函数,即运算符重...

  • 在Swift中定义自己的运算符

    自定义运算符 除了实现标准运算符,在 Swift 中还可以声明和实现自定义运算符。 新的运算符要在全局作用域内,使...

  • Swift5.1学习随笔之自定义运算符(Custom Opera

    自定义运算符就是无中生有 可以自定义新的运算符:在全局作用域使用operator进行声明 前缀运算符例子?: 解释...

  • PageStatusTransformer:一种Android低

    页面状态切换 特性 构造自定义状态 可以通过字符串或枚举自定义任意状态,无须受 showLoading showE...

  • OC&Swift位移枚举使用

    1.前言 1.什么是位移枚举? 如我们在写代码中经常用过或者是见过的这种写法的枚举 通过 | (位运算符或)进行组...

  • 2020-07-01【c#】枚举的位运算 & LayerMask

    枚举的位运算 1.先通过|运算符,获得一个合并的集合结果2.将这个结果,通过和某个枚举值的&运算,进行比较判断,由...

  • 10、枚举与闭包

    枚举 枚举和普通类相比有什么优势 枚举类型、枚举名称与枚举值 枚举的比较运算 两个枚举之间可以使用等值比较(==)...

网友评论

      本文标题:自定义枚举,使之可以进行或运算

      本文链接:https://www.haomeiwen.com/subject/psxeiqtx.html