Objective C提供了几种声明枚举的方法。它可以通过typedef enum
或NS_ENUM
声明。 NS_ENUM
宏将类型名称作为参数,我并不完全理解它的含义。我没有在官方Apple文档中找到NS_ENUM
宏的描述。使用enum
和NS_ENUM
之间有什么区别?另一个问题是,是否可以使用NS_ENUM
中的任何其他类型而不是NSInteger
及其相对整数类型?
答案 0 :(得分:12)
NSHipster提供了一篇非常好的帖子,详细解释了这一点:
http://nshipster.com/ns_enum-ns_options/
引用底线:
这种方法结合了上述所有方法中最好的方法(enum,typedef enum),甚至为编译器提供类型检查和切换语句完整性的提示
答案 1 :(得分:6)
主要区别在于typedef NS_ENUM
正确转换为Swift枚举,而typedef enum
则不然。
答案 2 :(得分:2)
从标题为“Enumeration Macros”的小节中:
NS_ENUM
和NS_OPTIONS
宏提供了一种简洁,简单的方法来定义基于C语言的枚举和选项。这些宏改进了Xcode中的代码完成,并明确指定了枚举和选项的类型和大小。此外,此语法以旧方式编译器正确评估的方式声明枚举,以及可以解释基础类型信息的新方法。使用
NS_ENUM
宏来定义枚举,这是一组互斥的值:typedef NS_ENUM(NSInteger, UITableViewCellStyle) { UITableViewCellStyleDefault, UITableViewCellStyleValue1, UITableViewCellStyleValue2, UITableViewCellStyleSubtitle };
NS_ENUM
宏有助于定义枚举的名称和类型,在本例中名为UITableViewCellStyle
,类型为NSInteger
。枚举的类型应为NSInteger
。