博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS - OC Enum 枚举
阅读量:7117 次
发布时间:2019-06-28

本文共 2542 字,大约阅读时间需要 8 分钟。

前言

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

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

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

1、枚举的定义

1.1 C 样式枚举定义

  • 定义枚举类型

    /*        typedef enum new;        new:枚举类型的变量值列表        C 样式的枚举默认枚举类型变量值的格式为整型    */    typedef enum {        AA,        BB,        CC    } Name;
  • 判断枚举值

    - (void)studentWithName:(Name)name {        switch (name) {            case 0:                NSLog(@"AA");                break;            case 1:                NSLog(@"BB");                break;            case 2:                NSLog(@"CC");                break;            default:                break;        }    }
  • 设置枚举的值

    [self studentWithName:1];    [self studentWithName:CC];

1.2 数字型枚举定义

  • 定义枚举类型

    /*        typedef NS_ENUM(_type, _name) new;                              _type:枚举类型变量值的格式        _name:枚举类型的名字        new:枚举类型的变量值列表    */    typedef NS_ENUM(NSUInteger, Seasons) {        spring = 0,        summer,        autumn,        winter    };
  • 判断枚举值

    - (void)selectWithSeasons:(Seasons)seasons {        if (seasons == 1 || seasons == 2) {            NSLog(@"comfortable");        } else {            NSLog(@"cold");        }    }
  • 设置枚举的值

    [self selectWithSeasons:0];    [self selectWithSeasons:autumn];

1.3 位移型枚举定义

  • 定义枚举类型

    /*        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    };
  • 判断枚举值

    - (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);        }    }
  • 设置枚举的值

    [self movedWithActionType:0];    [self movedWithActionType:ActionTypeLeft | ActionTypeTop | ActionTypeBottom | ActionTypeRight];

转载于:https://www.cnblogs.com/QianChia/p/5780953.html

你可能感兴趣的文章
Java设计模式---单例模式
查看>>
从源码角度看ContentProvider
查看>>
MMP,我说每年年会我怎么老是中不了奖,原来是这样
查看>>
十二、实战底部(二)
查看>>
阿里最全面试116题:阿里天猫、蚂蚁金服、阿里巴巴面试题含答案
查看>>
前端开发必备网站
查看>>
正则表达式大全(汇总)
查看>>
ELK 使用小技巧(第 5 期)
查看>>
Java并发(9)- 从同步容器到并发容器
查看>>
假如时光倒流,我会这么学习Java
查看>>
iOS--React Native浏览器插件
查看>>
一个JSON字符串和文件处理的命令行神器jq,windows和linux都可用
查看>>
Notification Swift 3 0
查看>>
Ionic Cordova实现软键盘的监听 以及操作大全
查看>>
Android小知识10则(下)
查看>>
Flask源码解析:从第一个版本开始阅读Flask源码
查看>>
JavaScript 工作原理之二-如何在 V8 引擎中书写最优代码的 5 条小技巧(译)
查看>>
Java集合(一) —— ArrayList
查看>>
作为JavaScript开发人员,这些必备的VS Code插件你都用过吗
查看>>
Promise 学习笔记
查看>>