关于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/