【问题标题】:Typedef enum declaration: which is correctTypedef 枚举声明:这是正确的
【发布时间】:2017-05-02 03:17:26
【问题描述】:

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

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;

两者似乎都可以正常工作并且没有错误。但我想知道哪个是正确的。

【问题讨论】:

    标签: objective-c enums


    【解决方案1】:

    我会推荐:

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

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

    【讨论】:

      【解决方案2】:

      在这两者之间,本身并没有错误的形式。也就是说,目前在 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 宏有助于定义枚举的名称和类型,在本例中命名为 NSInteger 类型的 UITableViewCellStyle。枚举的类型应该是 NSInteger。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-27
        • 1970-01-01
        • 2020-10-27
        相关资源
        最近更新 更多