在Adopting Modern Objective-C指南中,苹果建议使用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
};发布于 2014-11-28 23:54:11
首先,NS_ENUM使用了C语言的一个新特性,您可以在该特性中指定枚举的底层类型。在本例中,枚举的底层类型是NSInteger (在普通的C中,它可以是编译器决定的任何类型,字符、短整型,甚至是24位整数,如果编译器喜欢的话)。
其次,编译器专门识别Swift宏,因此它知道您有一个枚举,它的值不应该像标志一样组合在一起,调试器知道发生了什么,并且枚举可以自动转换为NS_ENUM。
发布于 2014-11-28 23:45:36
NS_ENUM允许您定义类型。这意味着编译器可以检查您是否将枚举赋值给不同的变量,如下所示:
//OK in both cases
NSInteger integer = SizeWidth;
//OK only with typedef
BOOL value = SizeHeight;NS_ENUM还在switch语句中提供了检查,您已经涵盖了所有可能的值:
//Will generate warning if using NS_ENUM
switch(sizeVariable) {
case SizeWidth:
//Do something
}https://stackoverflow.com/questions/27191638
复制相似问题