iOS开发笔记(十二):位移枚举

本文详细介绍了枚举类型的定义及其在程序设计中的应用,包括普通枚举与位移枚举的区别和实现方式,并通过实例展示了位移枚举如何在一个参数中传递多个值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在程序设计语言中,一般用一个数值来代表某一状态,这种处理方法不直观,易读性差。如果能在程序中用自然语言中有相应含义的单词来代表某一状态,则程序就很容易阅读和理解。也就是说,事先考虑到某一变量可能取的值,尽量用自然语言中含义清楚的单词来表示它的每一个值,这种方法称为枚举方法,用这种方法定义的类型称枚举类型。

定义的枚举类型名称通常与项目的类文件前缀相同,或者是类库框架缩写,或者跟随具体业务名,如果开头是缩写要大写表示,跟随其后的命名应采用驼峰命名法则,命名应准确表述枚举表示的意义,枚举中各个值都应以定义的枚举类型开头,其后跟随各个枚举值对应的状态、选项或者状态码。

1.枚举的实现方式

  • C语言枚举

      typedef enum {
      	GHTypeUp,
      	GHTypeDown,
      }GHType;
    复制代码
  • OC枚举: 强烈建议大家在日常编程中使用 OC 枚举

      typedef NS_ENUM(NSUInteger, GHDemoType) {
      	GHDemoTypeUp,
      	GHDemoTypeDown
      };
    复制代码
  • 位移枚举: 用于多值判断

      typedef NS_OPTIONS(NSUInteger, GHOpertionType) {
      	GHOpertionTypeUp = 1<<0,
      	GHOpertionTypeDown = 1<<1,
      	GHOpertionTypeLeft = 1<<2,
      	GHOpertionTypeRight = 1<<3
      };	
    复制代码

2.举例

// 方法调用
[self demo:GHOpertionTypeUp | GHOpertionTypeDown | GHOpertionTypeLeft | GHOpertionTypeRight];
复制代码
// 方法实现
- (void)demo:(GHOpertionType)type {

    if (type & GHOpertionTypeUp) {
        NSLog(@"GHOpertionTypeUp");
    }

    if (type & GHOpertionTypeDown) {
        NSLog(@"GHOpertionTypeDown");
    }

    if (type & GHOpertionTypeLeft) {
        NSLog(@"GHOpertionTypeLeft");
    }

    if (type & GHOpertionTypeRight) {
        NSLog(@"GHOpertionTypeRight");
    }

}
复制代码

3.位移枚举的解释

首先你要知道以下这些知识:

  1. << 是左移运算符 : 用来将一个数的各二进制位全部左移若干位。

     举个栗子  :0000 0001 代表 二进制中的 1 
     左移一位    <<1
     就会变成  :0000 0010 代表 二进制中的 2
     简便算法:8 << n的值为8 *(2^n)
    复制代码
  2. 按位与运算 :&

     1 & 1 = 1;	1 & 0 = 0;	0 & 0 = 0
     总结规则:有0则为0
    复制代码
  3. 按位或运算: |

     1 | 1 = 1;	1 | 0 = 1;	0 | 0= 0
     总结规则: 有1则为1
    复制代码

以上可以推导出:

GHOpertionTypeUp :     0000 0001 
GHOpertionTypeDown :   0000 0010 
GHOpertionTypeLeft :   0000 0100
GHOpertionTypeRight :  0000 1000		
复制代码

由第三点我们可知,GHOpertionTypeUp | GHOpertionTypeDown | GHOpertionTypeLeft | GHOpertionTypeRight 进行按位或运算后的结果为 : 0000 1111,再根据第二点,此值和GHOpertionTypeUp 进行按位与运算时得到的结果为 : 0000 0001,结果不为 0,也就会打印出 GHOpertionTypeUp,依次类推。

综上所述可以解释位移枚举为什么可以一个参数可以传递多个值,这也是位移枚举的优点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值