美文网首页
NS_ENUM&NS_OPTION

NS_ENUM&NS_OPTION

作者: Mars_21a2 | 来源:发表于2020-01-16 16:32 被阅读0次

    先复习几个概念

    typedef定义类型别名

    语法:typedef类型别名

    例子:typedef double REAL

    REAL可以直接用于定义double类型

    enum 枚举

    语法: 

    enum WEEKDAY{   \\该语句定义了一个枚举类型

        MONDAY = 1,

        TUSEDAY,

        WEDNESDAY,

        THURSDAY,

        FRIDAY,

        SATURDAY,

        SUNDAY

    };


    使用:

    enum WEEKDAY day;   \\该语句声明了一个枚举类型的变量

    使用枚举名称的时候一般前面要加enum关键字,所以一般都用typedef给enum定义一个类型别名

    typedef enum {

        UITableViewCellStyleDefault,

        UITableViewCellStyleValue1,

        UITableViewCellStyleValue2,

        UITableViewCellStyleSubtitle

    } UITableViewCellStyle;

    C语言和OC里面 enum如果没有设定默认值的话,那么第一个值默认为0,下面的值默人递增.

    swift里面不设置默认值的话,不会有默认值

    stuct 结构体

    语法:

    stuck  softArray

    {

        Int len;

        Int array[];

    }

    使用 softArray.len

    苹果为了使用方便宏定义了NS_ENUM和NS_OPTION

    用法:

    NS_ENUM用于一般的枚举定义

    NS_OPTION用于可多选的,按二进制位定义的枚举

    typedefNS_ENUM(NSInteger, TestEnum){

        TestEnumA =0,

        TestEnumB,

        TestEnumC,

        TestEnumD,

    };

    typedefNS_OPTIONS(NSInteger, TestOption) {

        TestOptionA =1,

        TestOptionB =1<<1,

        TestOptionC =1<<2,

        TestOptionD =1<<3,

    };

    分别对应于CF框架里的CF_ENUM和CF_OPTION,由于是闭源的,我们无法直接窥探出它在CF框架中的具体实践,

    想办法把OC代码编译成C++,大致看出了其中的具体实现

    cd到.m文件夹下

    clang -rewrite-obj test.m

    看来两者的实现是一模一样的,只是为了字面意思上的区分.

    相关文章

      网友评论

          本文标题:NS_ENUM&NS_OPTION

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