NS_ENUM&NS_OPTION

先复习几个概念

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


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容