OC Enum 枚举

前言

  • iOS 5.0 之后,Objective-C 提供了新的枚举定义方式,定义枚举的同时,可以指定枚举中数据的类型。

    1
    2
    typedef NS_OPTIONS(_type, _name) new;   -> 位移的,可以使用 按位或 设置数值
    typedef NS_ENUM(_type, _name) new; -> 数字的,直接使用枚举设置数值
  • 位移型枚举:

    • 使用 按位或 可以给一个参数同时设置多个 “类型”。在具体执行的时候,使用 按位与 可以判断具体的 “类型”。
    • OC 中 64 位操作系统 NSInteger 64 位 - long => 能够表示 64 种选项。通过位移设置,就能够得到非常多的组合。
    • 对于位移枚举类型,如果传入 0,表示什么附加操作都不做!=> 执行效率是最高的。如果开发中,看到位移的枚举,同时不要做任何的附加操作,参数可以直接输入 0!

1、枚举的定义

1.1 C 样式枚举定义

  • 定义枚举类型

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /*
    typedef enum new;

    new:枚举类型的变量值列表

    C 样式的枚举默认枚举类型变量值的格式为整型
    */

    typedef enum {

    AA,
    BB,
    CC

    } Name;
  • 判断枚举值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    - (void)studentWithName:(Name)name {

    switch (name) {

    case 0:

    NSLog(@"AA");
    break;

    case 1:

    NSLog(@"BB");
    break;

    case 2:

    NSLog(@"CC");
    break;

    default:
    break;
    }
    }
  • 设置枚举的值

    1
    2
    3
    [self studentWithName:1];

    [self studentWithName:CC];

1.2 数字型枚举定义

  • 定义枚举类型

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /*
    typedef NS_ENUM(_type, _name) new;

    _type:枚举类型变量值的格式
    _name:枚举类型的名字
    new:枚举类型的变量值列表
    */

    typedef NS_ENUM(NSUInteger, Seasons) {

    spring = 0,
    summer,
    autumn,
    winter
    };
  • 判断枚举值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    - (void)selectWithSeasons:(Seasons)seasons {

    if (seasons == 1 || seasons == 2) {

    NSLog(@"comfortable");

    } else {

    NSLog(@"cold");
    }
    }
  • 设置枚举的值

    1
    2
    3
    [self selectWithSeasons:0];

    [self selectWithSeasons:autumn];

1.3 位移型枚举定义

  • 定义枚举类型

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    /*
    typedef NS_OPTIONS(_type, _name) new;

    _type:枚举类型变量值的格式
    _name:枚举类型的名字
    new:枚举类型的变量值列表

    位移的枚举判断不能使用 else,否则会丢选项
    */

    typedef NS_OPTIONS(NSUInteger, ActionTypeOptions) {

    ActionTypeTop = 1 << 0,
    ActionTypeBottom = 1 << 1,
    ActionTypeLeft = 1 << 2,
    ActionTypeRight = 1 << 3
    };
  • 判断枚举值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    - (void)movedWithActionType:(ActionTypeOptions)type {

    if (type == 0) {
    return;
    }

    if (type & ActionTypeTop) {
    NSLog(@"上 %li", type & ActionTypeTop);
    }
    if (type & ActionTypeBottom) {
    NSLog(@"下 %li", type & ActionTypeBottom);
    }
    if (type & ActionTypeLeft) {
    NSLog(@"左 %li", type & ActionTypeLeft);
    }
    if (type & ActionTypeRight) {
    NSLog(@"右 %li", type & ActionTypeRight);
    }
    }
  • 设置枚举的值

    1
    2
    3
    [self movedWithActionType:0];

    [self movedWithActionType:ActionTypeLeft | ActionTypeTop | ActionTypeBottom | ActionTypeRight];
文章目录
  1. 1. 前言
  2. 2. 1、枚举的定义
    1. 2.1. 1.1 C 样式枚举定义
    2. 2.2. 1.2 数字型枚举定义
    3. 2.3. 1.3 位移型枚举定义
隐藏目录