美文网首页
Objective-C枚举

Objective-C枚举

作者: 14cat | 来源:发表于2017-10-30 22:12 被阅读11次

枚举类型

  • 枚举的作用在于规范并语义化的定义代码中的状态、选项等常量。
  • 如果一个变量只有几种可能的值,比如星期几的变量,只有星期一、星期二、星期三、星期四、星期五、星期六、星期天这7个值,就可以使用枚举类型(春夏秋冬、上下左右、东西南北等)
  • 枚举类型的定义以关键字enum开头,之后是枚举数据类型的名称,最后是在一对花括号内的选项标识符序列。 (实现枚举所用的数据类型取决于编译器。除了使用默认类型,还可以指明用何种“底层数据类型”来保存枚举类型的变量)
enum Direction {up, down, left, right};
enum Direction : UNSInteger {up, down, left, right};
  • 编译器会为枚举分配一个独有的编号,从0开始,每个枚举递增1。(可以手动指定某个枚举成员所对应的值,接下来的枚举值会在上一个的基础上递增1)
  • 枚举变量的本质就是无符号整数(%u占位符)
// up=1,down=2,left=3,right=4
enum Direction {up = 1, down, left, right};

// 定义匿名枚举类型,并定义两个枚举变量
enum {male, female} me, you;
  • 使用关键字typedef重新定义枚举,目的是为了简化枚举的声明,不需要每次都写enum
// 使用关键字typedef定义枚举类型
enum Direction {up, down, left, right} ;
typedef enum Direction Direction;

// 使用Direction代替完整的enum Direction
Direction var1, var2;

基础使用方法:

typedef enum _State {
  StateOK = 0,
  StateError,
  StateUnknow
} State;

// 指明枚举类型
State status = StateOK;

- (void)dealWithState:(State)state {
  switch(state) {
    case StateOK:
        break;
    case StateError:
        break;
    case StateUnknow:
        break;
  } 
}
  • 枚举的另一种使用方式是定义为按位掩码,当定义选项的时候,若这些选项可以彼此组合,则在设置特定的枚举值后,各选项间就可通过“按位或”来组合。因为每个枚举值所对应的二进制表示中,只有1个二进制位的值是1,所以多个选项“按位或”后的组合值是唯一的,且将某一选项与组合值做“按位与”操作,即可判断出组合值中是否包含该选项。
enum Direction {
   up = 1 << 0, 
   down = 1 << 1, 
   left = 1 << 2, 
   right = 1 << 3
};

选项使用方法

//方向,可同时支持一个或多个方向
typedef enum _Direction {
    DirectionNone = 0,
    DirectionTop = 1 << 0        // 0001
    DirectionLeft = 1 << 1,      // 0010
    DirectionRight = 1 << 2,     // 0100
    DirectionBottom = 1 << 3     // 1000
} Direction;

//用“或”运算同时赋值多个选项
Direction direction = DirectionTop | DirectionLeft | DirectionBottom;  // 1011
//用“与”运算取出对应位
if (direction & DirectionTop) {  // 1011 & 0001
    NSLog(@"top");
}
if (direction & DirectionLeft) {  // 1011 & 0010 
    NSLog(@"left");
}
if (direction & DirectionRight) {  // 1011 & 0100
    NSLog(@"right");
}
if (direction & DirectionBottom) {  // 1011 & 1000
    NSLog(@"bottom");
}
/*
打印的结果
2017-10-30 16:39:35.584816+0800 OBJC_TEST[5215:236112] top
2017-10-30 16:39:35.584825+0800 OBJC_TEST[5215:236112] left
2017-10-30 16:39:35.584831+0800 OBJC_TEST[5215:236112] bottom
*/

enum在Objective-C中的“升级版”

  • 从C++ 11开始,我们可以为枚举指定其实际的存储类型
enum State : NSInteger {/*...*/};
  • 保证枚举类型的兼容性,推荐使用NS_ENUM和NS_OPTIONS
// NS_ENUM,定义状态等普通枚举类型
typedef NS_ENUM(NSUInteger, State) {
    StateOK = 0,
    StateError,
    StateUnknow
};
// NS_OPTIONS,定义可组合选项的枚举类型
typedef NS_OPTIONS(NSUInteger, Direction) {
    DirectionNone = 0,
    DirectionTop = 1 << 0,
    DirectionLeft = 1 << 1,
    DirectionRight = 1 << 2,
    DirectionBottom = 1 << 3
};

相关文章

  • swift学习笔记(二)

    继续记录swift知识点: 1)枚举 枚举语法: ** 和 C 和 Objective-C 不同,Swift 的枚...

  • 第8章:枚举

      在Swift中,枚举与C、C++、Objective-C中的枚举相比有巨大差异,可以认为枚举是由类蜕化而成的。...

  • 8、【Swift】枚举 - Enumerations

    枚举语法 使用 enum 关键词来创建枚举 指南针四个方向 与 C 和 Objective-C 不同,north,...

  • Objective-C的三种枚举

    在Objective-C中可以通过三种方式来定义一个枚举类型。 一、C语言中的枚举 C语言中的枚举形如: 二、C+...

  • Objective-C枚举

    枚举类型 枚举的作用在于规范并语义化的定义代码中的状态、选项等常量。 如果一个变量只有几种可能的值,比如星期几的变...

  • Swift枚举

    与C,Objective-C中的枚举相比,Swift中枚举功能更强大。它支持很多只有类才有的特性,如:Proper...

  • NS_ENUM 和 NS_OPTIONS

    Objective-C 里的枚举有两种类型:NS_ENUM 和 NS_OPTIONS,本质上是一样的,都是枚举。 ...

  • Swift中的枚举

    在Objective-C中,枚举是用来管理一组相关常量的集合,使用枚举可以提高程序的可读性,使代码更容易维护。但是...

  • iOS枚举类型enum,NS_ENUM,NS_OPTIONS

    已被此妹萌哭,好了,废话不多说,进入正题,今天介绍一下objective-c中的枚举 提要 首先要知道的是,枚举值...

  • 关于OC中的枚举定义

    前言 Enum,也就是枚举,从C语言开始就有了,C++、Java、Objective-C、Swift这些语言,当然...

网友评论

      本文标题:Objective-C枚举

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