objective-c - typedef NS_ENUM 与 typedef 枚举

标签 objective-c enums

关于Adopting Modern Objective-C指南,Apple 建议使用 NS_ENUM 宏而不是枚举。我还阅读了来自 NSHipster 的解释关于 NS_ENUM 和 NS_OPTIONS。

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

// typedef enum
typedef enum {
    SizeWidth,
    SizeHeight
}Size;

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

最佳答案

首先,NS_ENUM 使用了 C 语言的一个新特性,您可以在其中指定枚举的基础类型。在这种情况下,枚举的基础类型是 NSInteger(在纯 C 中,它可以是编译器决定的任何类型,char、short,甚至是 24 位整数,如果编译器愿意的话)。

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

关于objective-c - typedef NS_ENUM 与 typedef 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27191638/

相关文章:

ios - 为IOS中的所有设备创建唯一的UUID?

java - 如何使用 Hibernate 将枚举映射到单独的表?

包含函数的 java 枚举 - 使用 switch 或 seller 作为成员变量

objective-c - 如何使用flutter在iOS上以编程方式显示Airplay面板

iphone - 将文件夹从 iPhone Resources 目录复制到文档目录

iphone - 在 Interface Builder 和 XCode 中连接 UILabel?

c# - EF 代码生成 : How to get a System enum to work as an EdmEnumType?

与枚举匹配的模板函数中的 C++ 无法解释的变化

c++ - 枚举类的关系运算符重载

iOS PDF 原生搜索