Typedef枚举声明:哪个是正确的

时间:2017-05-02 03:17:27

标签: objective-c enums

所以我习惯使用这种格式来声明枚举类型:

typedef enum SortType {
    SORT_BY_NAME,
    SORT_BY_COMPANY,
    SORT_BY_NONE
} SortType;

但我看到有人以这种方式宣布

typedef enum {
    SORT_BY_NAME,
    SORT_BY_COMPANY,
    SORT_BY_NONE
} SortType;

两者似乎都有效,没有错误。但我想知道哪个是正确的。

2 个答案:

答案 0 :(得分:3)

我建议:

typedef NS_ENUM(NSInteger, SortType) {
    SortTypeName,
    SortTypeCompany,
    SortTypeNone
};

根据Apple开发人员指南和示例代码:Adopting Modern Objective-C > Enumeration Macros

答案 1 :(得分:0)

在这两者之间,本身并没有错误的形式。也就是说,目前推荐的在Objective-C中声明枚举的方法是使用NS_ENUM宏:

typedef NS_ENUM(NSInteger, SortType) {
    SORT_BY_NAME,
    SORT_BY_COMPANY,
    SORT_BY_NONE
};

来自Apple的Adopting Modern Objective-C指南:

  

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

     

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

     

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