iOS开发中定义枚举的正确姿势(NS_ENUM VS enum)

栏目: IOS · 发布时间: 4年前

内容简介:iOS开发中这种比较特殊针对于前三种方式,我们应该使用那一种更新好呢?

iOS开发中 枚举 也是经常会用到的数据类型之一。最近在整理别人写的老项目的时候,发现枚举的定义使用了多种方式。

  • 方式1
typedef enum {
    MJPropertyKeyTypeDictionary = 0, // 字典的key
    MJPropertyKeyTypeArray // 数组的key
} MJPropertyKeyType;
  • 方式2
typedef enum: NSInteger {
        None,
        Melee,
        Fire,
        Ice,
        Posion
    }AttackType;
  • 方式3
typedef NS_ENUM(NSUInteger, MeiziCategory) {
    MeiziCategoryAll = 0,
    MeiziCategoryDaXiong,
    MeiziCategoryQiaoTun,
    MeiziCategoryHeisi,
    MeiziCategoryMeiTui,
    MeiziCategoryQingXin,
    MeiziCategoryZaHui
};
  • 方式4

这种比较特殊 支持位操作

typedef NS_OPTIONS(NSUInteger, ActionType) {
    ActionTypeUp    = 1 << 0, // 1
    ActionTypeDown  = 1 << 1, // 2
    ActionTypeRight = 1 << 2, // 4
    ActionTypeLeft  = 1 << 3, // 8
};

针对于前三种方式,我们应该使用那一种更新好呢?

这是来自 Stack Overflow 的解释。

Second, the compiler specifically recognises the NS_ENUM macro, so it knows that you have an enum with values that shouldn't be combined like flags, the debugger knows what's going on, and the enum can be translated to Swift automatically.

翻译:

其次,编译器专门识别NS_ENUM宏,因此它知道您有一个enum,它的值不应该像标志那样组合在一起,调试器知道发生了什么,并且enum可以自动转换为Swift。

从解释可以看出,定义普通的枚举时,推荐我们使用第三种方式 NS_ENUM() ,定义位移相关的枚举时,我们则使用 NS_OPTIONS()

而且我们查看苹果的框架,发现苹果使用的也是第三种和第四种。苹果的官方文档也有明确的说明,推荐我们使用 NS_ENUM()NS_OPTIONS()

总结:结合 Stack Overflow 和苹果官方的说明,我们以后在定义枚举时,应该使用 NS_ENUM()NS_OPTIONS() ,这样更规范。


以上所述就是小编给大家介绍的《iOS开发中定义枚举的正确姿势(NS_ENUM VS enum)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

颠覆式创新:移动互联网时代的生存法则

颠覆式创新:移动互联网时代的生存法则

李善友 / 机械工业出版社 / 2014-12-1 / 69

为什么把每件事情都做对了,仍有可能错失城池?为什么无人可敌的领先企业,却在一夜之间虎落平阳? 短短三年间诺基亚陨落,摩托罗拉区区29亿美元出售给联想,芯片业霸主英特尔在移动芯片领域份额几乎为零,风光无限的巨头转眼成为被颠覆的恐龙,默默无闻的小公司一战成名迅速崛起,令人瞠目结舌的现象几乎都被“颠覆式创新”法则所解释。颠覆式创新教你在新的商业竞争中“换操作系统”而不是“打补丁”,小公司用破坏性思......一起来看看 《颠覆式创新:移动互联网时代的生存法则》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具