NS_ENUM vs enum

时间:2014-05-01 10:35:45

标签: objective-c

Objective C提供了几种声明枚举的方法。它可以通过typedef enumNS_ENUM声明。 NS_ENUM宏将类型名称作为参数,我并不完全理解它的含义。我没有在官方Apple文档中找到NS_ENUM宏的描述。使用enumNS_ENUM之间有什么区别?另一个问题是,是否可以使用NS_ENUM中的任何其他类型而不是NSInteger及其相对整数类型?

3 个答案:

答案 0 :(得分:12)

NSHipster提供了一篇非常好的帖子,详细解释了这一点:

http://nshipster.com/ns_enum-ns_options/

引用底线:

  
    

这种方法结合了上述所有方法中最好的方法(enum,typedef enum),甚至为编译器提供类型检查切换语句完整性的提示

  

答案 1 :(得分:6)

主要区别在于typedef NS_ENUM正确转换为Swift枚举,而typedef enum则不然。

答案 2 :(得分:2)

以下是Apple官方文档的链接:
https://developer.apple.com/library/content/releasenotes/ObjectiveC/ModernizationObjC/AdoptingModernObjective-C/AdoptingModernObjective-C.html#//apple_ref/doc/uid/TP40014150-CH1-SW6

从标题为“Enumeration Macros”的小节中:

  

NS_ENUMNS_OPTIONS宏提供了一种简洁,简单的方法来定义基于C语言的枚举和选项。这些宏改进了Xcode中的代码完成,并明确指定了枚举和选项的类型和大小。此外,此语法以旧方式编译器正确评估的方式声明枚举,以及可以解释基础类型信息的新方法。

     

使用NS_ENUM宏来定义枚举,这是一组互斥的值:

typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
        UITableViewCellStyleDefault,
        UITableViewCellStyleValue1,
        UITableViewCellStyleValue2,
        UITableViewCellStyleSubtitle
};
     

NS_ENUM宏有助于定义枚举的名称和类型,在本例中名为UITableViewCellStyle,类型为NSInteger。枚举的类型应为NSInteger