zoukankan      html  css  js  c++  java
  • IOS 枚举 enum

    前言:oc中枚举的正确使用,可以增强代码的可读性,减少各种“错误”,让代码更加的规范。下面先介绍枚举的用法,最后介绍个人对枚举的理解,什么是枚举,为什么用枚举。

    一. OC中,枚举的使用

    1. 写法1格式:关键字 enum 枚举名字{枚举成员,枚举成员2};

    1 /*
    2  * 枚举 可以写在@interface 里面
    3  **/
    4 enum Test{
    5     test = 1,
    6     test1 = 2,
    7 };

    使用方法:enum 枚举名称 变量名称 = 枚举成员。

    1 enum Test var = test;
    2 NSLog(@"%u", var);
    3 // 输出值为 1

    注意:如果枚举成员不设置值,默认第一个枚举成员值为整型0,后续枚举成员值依次加1。

    2.写法2格式,typedef enum 枚举名称{枚举成员}枚举别名;

    1 /*
    2  定义'枚举类型', Test11 是属性类型 相当于nsstring,int,。。
    3  其中Test1 枚举名字可以省略不写,称“匿名枚举”
    4  **/
    5 typedef enum Test1{
    6     test11 = 1,
    7     test12 = 2,
    8 }Test11;

    使用方法:属性类型 变量名称 = 枚举成员;

    1 Test11 var1 = test12;
    2 NSLog(@"%u", var1);
    3 // 输出值为 2

    注意:typedef enum 定义的枚举,可以理解为枚举类型,相当于nsstring,int等,可用属性类型直接创建变量,然后完成赋值。

    这种写法原有的枚举名称可以省略,称“匿名枚举”。

    3.写法3,ios6之后,也是最标准的写法,更加的统一,规范。用“NS_ENUM”和“NS_OPTIONS”定义

    格式:typedef NS_ENUM(存储类型,属性类型){枚举成员};

     1 /*
     2  * 存储类型,表示成员变量的值类型,如NSInteger
     3  * 属性类型,上文说到的 枚举别名,可以此名称调用枚举
     4  * 其中 NS_ENUM 多用于一般枚举,NS_OPTIONS 多用于位移枚举
     5  **/
     6 typedef NS_ENUM(NSInteger,Test6){
     7     test61 = 1,
     8     test62 = 2,
     9 };
    10 
    11 typedef NS_OPTIONS(NSUInteger, Test7) {
    12     TestNone = 0,
    13     TestA7 = 1 << 0,
    14     TestB7 = 1 << 1,
    15     TestC7 = 1 << 2,
    16     TestD7 = 1 << 3
    17 };

    使用方法:属性别名 变量名称 = 枚举成员;

    Test6 var6 = test62;
    NSLog(@"%ld", (long)var6);
    // 输出值为 2
        
    Test7 var7 = TestA7 | TestC7;
    NSLog(@"%ld", (long)var7);
    // 输出值为 5 
    // 0001 | 0100 = 0101 十进制为5

     注意:上面TestC7 1<<2,表示2进制1 左移2位,为0100,与0001 或运算,得到0101,转换十进制为5.

    常用枚举用 NS_ENUM,NS_OPTIONS 多用于位移枚举,位的运算(或且非异或等)

    二. 枚举错误的写法,编译时不会报错,但是运行报错

     1 //错误写法1
     2     enum {
     3         test21 = 1,
     4         test22 = 2,
     5     }Test2;
     6 
     7 //错误写法2
     8     NS_ENUM(NSInteger,Test3){
     9         test31 = 1,
    10         test32 = 2,
    11     };
    12 
    13 //错误写法3
    14     NS_OPTIONS(NSUInteger, Test4){
    15         test41 = 1,
    16         test42 = 2,
    17     };
    18 
    19     NS_OPTIONS(NSUInteger, Test5) {
    20         TestA = 1 << 0,
    21         TestB = 1 << 1,
    22         TestC = 1 << 2,
    23         TestD = 1 << 3
    24     };

    三. 枚举的理解 

    1.oc是基于c语言的,在c语言中枚举的定义

    在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是:

    1 #define MON  1
    2 #define TUE   2
    3 #define WED  3
    4 #define THU   4
    5 #define FRI    5
    6 #define SAT   6
    7 #define SUN   7

    这样很繁琐,在此,我们定义一种新的数据类型,希望它能完成同样的工作。这种新的数据类型叫枚举型。

     2.枚举用于规范的定义代码中的状态、选项等“常量”。

    其中状态与选项的概念区别(states and options)

    状态,同时只能有一种,如“OK”,“Error”,不可能同时是OK和Error。
    选项,同时可以有一种或一种以上,如App可以同时支持横屏和竖屏,横屏竖屏在这个时候就是“屏幕方向”的两种不同的选项。

    总结:

    个人觉得枚举还是有必要掌握的,格式清晰,使用简便。能减少代码的冗余度,提高代码规范,增强可读性.

    ps:第一次总结,有错误之处还请指正,thanks,荆轲刺秦王~~

    参考文档1:https://www.cnblogs.com/JCSU/articles/1299051.html 

    参考文档2:https://blog.csdn.net/snow_xuey/article/details/55258875

    参考文档3:https://blog.csdn.net/imkata/article/details/78861077

  • 相关阅读:
    网络控制芯片AX88796B系列使用简介
    word的样式设置
    Xilinx FPGA使用——ROM初始化文件
    我的2017
    STM32基础分析——USART的DMA模式
    STM32基础分析——PWM配置
    当我在看简历的时候,我在看什么……
    FPGA基础学习(4) -- 时序约束(理论篇)
    如何下载完整版专利
    查看相关专利的好处
  • 原文地址:https://www.cnblogs.com/zhouDongdong/p/9316518.html
Copyright © 2011-2022 走看看