为什么要写这个知识点?
这个知识点很简单,网上百度几分钟就能学会,我也是很早之前就知道并且会使用,但在项目开发中,时常在需要运用到这个的时候,总会忘记使用它!
枚举的运用的地方?
个人理解:当一个属性有多种类型值的时候。例如:商品购买状态:1.未购买,2.购买中,3.购买成功,4.发货成功,5.收货成功。
举个例子,我们想要在开发中根据四季的变化做不同的操作,我们首先想到的可能会是定义一个int型变量,通过为该变量赋不同的值来表示四季(e.g. 1为春天,2为夏天,3为秋天,4为冬天).但是,对于阅读该份代码的人来讲,他们并不能在短时间内就明白数字1234所代表的具体含义.这个时候,选择使用枚举则可以应对该需求。
C语言中的枚举
enum 枚举名称
{
标识符 = 整型常量,
标识符 = 整型常量,
标识符 = 整型常量,
标识符 = 整型常量
};
以”定义一个枚举名称为Test,拥有TestA、TestB等枚举成员的枚举类型”为例,定义方式如下
enum Test
{
TestA = 0,
TestB = 1,
TestC = 2,
TestD = 3
};
OC语言中的枚举
在Objective-C语言中,Apple在iOS6中引入了两个宏来重新定义枚举类型(即:NS_ENUM与NS_OPTIONS),这两者在本质上并没有差别,都是用于定义枚举类型,但是在使用中NS_ENUM多用于一般枚举,而NS_OPTIONS则多用于带有移位运算的枚举
NS_ENUM使用示例
typedef NS_ENUM(NSInteger, Test)
{
TestA = 0,
TestB,
TestC,
TestD
};
NS_OPTIONS使用示例
typedef NS_OPTIONS(NSUInteger, Test) {
TestA = 1 << 0,
TestB = 1 << 1,
TestC = 1 << 2,
TestD = 1 << 3
};
平时在实际开发中,使用NS_ENUM 类型的枚举比较多,使用NS_OPTIONS的枚举比较少,我说明一下两者的区别。
NS_ENUM :这种类型的枚举在使用中,一次只能使用一个枚举值。
NS_OPTIONS:这种类型的枚举一次可以使用多个枚举值,例如:TestA | TestB。在自定义label高度的时候见到这种类型比较多。
CGRect rect = [text boundingRectWithSize:CGSizeMake([UIScreen mainScreen].bounds.size.width - 85 * WIDTH, 0) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont fontWithName:@"ArialUnicodeMS" size:17.1]} context:nil];
以后如果有遇到这种业务需求的情况,可以使用这种枚举方式。
本人GitHub地址:https://github.com/wenjing0628