美文网首页
iOS --用枚举表示状态. 选项. 状态码 (4)

iOS --用枚举表示状态. 选项. 状态码 (4)

作者: dingzhijie | 来源:发表于2017-10-19 09:38 被阅读0次

     用枚举表示状态. 选项. 状态码

    例如: enum AAAAAA{

    aaaaaa,

    bbbbbb,

    ccccccc

    };

    枚举只是一种常量的命名方式, 编辑器回味枚举分配一个独有的编号, 从 0 开始, 每个枚举递增 1,

    定义枚举变量的方式

    enum  AAAAAA  state = cccccc;

    若想每次不同敲入 enum 而只需要写 AAAAAA, 则需要使用 typedef 关键字重新定义枚举类型,如下:

    enum AAAAAA{

    aaaaaa,

    bbbbbb,

    ccccccc

    };

    typedef enum  AAAAAA   AAAAAA;

    现在可以使用 AAAAAA  state = cccccc;

    // C++11 标准修订了枚举的某些特性, 其中一项改动是 ' : '  , 可以指明用何种 "底层数据类型" 来保存枚举类型的变量

    语法是:

    enum AAAAAA : NSInteger  {

    aaaaaa,

    bbbbbb,

    cccccc

    };

    Foundation 框架中定义了一些辅助的宏, 用这些宏来定义枚举类型时, 也可以指定用于保存枚举值的底层数据类型, 这些宏具备向后兼容性, 如果目标平台的编译器支持新标准, 那就使用新式语法, 否则就改用旧时语法,

    这些宏是用 #define 预处理指令来定义的, 其中一个用于定义 普通的枚举类型, 另一个用于定义像 UIViewAutoresizing 这种包含一系列选项的枚举类型, 这种用法不常用.

    两种用法如下:

    typedef NS_ENUM (NSInteger ,AAAAAA){

    aaaaaa,

    bbbbb,

    cccccc

    };

    typedef NS_OPTIONS(NSUInteger , AAAAAA){

    };

    最后还有一种枚举的用法, 就是在 switch 语句里, 我们总习惯 在 switch 语句中加上 default 分支, 然而, 若是用枚举来定义状态机, 则最好不要有 default 分支,  这样的话, 如果稍后有增加了一种状态, 那么编译器就会发出警告信息, 提示新加入的状态并未在  switch  分支中处理,  加入写上了 default 分支, 它就会处理这种新状态, 从而导致编译器不发警告信息, 同样, 用 NS_ENUM 定义其他枚举类型时也要注意此问题

    总结: 应该用枚举来表示状态机的状态, 传递给方法的选项以及状态码等值, 给这些值起一个简单易懂的名字.

    用 NS_ENUM 与 NS_OPTIONS 宏来定义枚举类型, 并指明其底层数据类型, 这样做可以确保枚举使用开发者所选的底层数据类型实现出来的, 而不是采用编译器所选的类型

    在处理枚举类型的 switch 语句中不要实现 default 分支, 这样,加入新的枚举值时, 编译器就会提示开发者, switch 语句并未处理所有枚举.

    相关文章

      网友评论

          本文标题:iOS --用枚举表示状态. 选项. 状态码 (4)

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