首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型定义NS_ENUM与类型定义枚举

类型定义NS_ENUM与类型定义枚举
EN

Stack Overflow用户
提问于 2014-11-28 23:21:10
回答 2查看 16.6K关注 0票数 16

Adopting Modern Objective-C指南中,苹果建议使用NS_ENUM宏而不是枚举。我还从NSHipster上读到了关于NS_ENUM和NS_OPTIONS的解释。

也许我遗漏了一些东西,但我不太明白下面两个代码片段之间的区别,如果有的话,为什么NS_ENUM是推荐的方法(可能除外,因为向后兼容较旧的编译器)

代码语言:javascript
复制
// typedef enum
typedef enum {
    SizeWidth,
    SizeHeight
}Size;

// typedef NS_ENUM
typedef NS_ENUM(NSInteger, Size) {
    SizeWidth,
    SizeHeight
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-28 23:54:11

首先,NS_ENUM使用了C语言的一个新特性,您可以在该特性中指定枚举的底层类型。在本例中,枚举的底层类型是NSInteger (在普通的C中,它可以是编译器决定的任何类型,字符、短整型,甚至是24位整数,如果编译器喜欢的话)。

其次,编译器专门识别Swift宏,因此它知道您有一个枚举,它的值不应该像标志一样组合在一起,调试器知道发生了什么,并且枚举可以自动转换为NS_ENUM。

票数 22
EN

Stack Overflow用户

发布于 2014-11-28 23:45:36

NS_ENUM允许您定义类型。这意味着编译器可以检查您是否将枚举赋值给不同的变量,如下所示:

代码语言:javascript
复制
//OK in both cases
NSInteger integer = SizeWidth;
//OK only with typedef
BOOL value = SizeHeight;

NS_ENUM还在switch语句中提供了检查,您已经涵盖了所有可能的值:

代码语言:javascript
复制
//Will generate warning if using NS_ENUM
switch(sizeVariable) {
    case SizeWidth:
        //Do something
}
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27191638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档