枚举&位移枚举
之前,我们一般都采用C语言的方式定义枚举,这种枚举可以称为普通的枚举。
但是我们在查看苹果的SDK或者看一些第三方库时会像下面这样定义枚举。比如SDWebImage代码中这样定义枚举,这称为位移枚举。
这种“位移枚举”是代表什么意思那?? 先回顾一下位运算符号(具体细节请百度)
下面我结合实际应用,说明一下“位移枚举”。
其实,"位移枚举"是C语言中遗留下来的一种很古老并且好用的技术延用至今。只需要定义一个参数,就可以通过传入不同的枚举组合,达到我们想要的效果。所以苹果在iOS6和Mac OS 10.8以后引入了两个宏NS_OPTIONS 和NS_ENUM来定义枚举类型,实际上是将enum定义和typedef合二为一,NS_ENUM和NS_OPTIONS本质是一样的,仅仅从字面上来区分其用途,采用不同的宏来从代码角度来区分。我们可以参考UIKit.Framework的头文件,可以看到大量的枚举定义。
NS_OPTIONS :一般用来定义位移相关操作的枚举值。
NS_ENUM: 一般用来定义普通的枚举。