前言
在工作开发中经常会用到枚举,但是用的时候就直接找一个粘过来改一改,没有客观深刻的认识,今天通过《Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法》一书第五条,及网络的内容整理了枚举的相关知识。
了解枚举
在学习枚举之前,我们要知道什么是枚举? 枚举是一种常量命名方式,只是用便于理解的值来表示常量,使代码易读。
一种写法:
typedef enum AttentionState {
AttentionReport = 0, //观众点主播时类型
AttentionSilent, //主播点观众时类型
AttentionBlank, //自己点击自己时类型
AttentionNormal, //观众点击观众的情况
} AttentionState;
用的时候可以使用switch:
-(void)state:(AttentionState)aState{
switch (aState) {
case AttentionBlank:
// [self blank];
break;
case AttentionNormal:
// [self normal];
break;
case AttentionReport:
// [self report];
break;
case AttentionSilent:
// [self silent];
break;
}
}
注意
我们之前习惯使用switch语句中加上default分支,然而,如果我们使用枚举来定义状态机,建议不要使用default。因为如果我们在使用过程中,发现需要再加上一个状态,不使用default时,编译器会发出警告,提醒我们新加入的状态没有在switch分支中处理
switch中的default,一般用在最后,表示非以上的任何情况下而发生的情况,我们一般习惯在他的后面加上个break。
如:
新加入的状态没有处理会警告 写default分支就不会报警告
升级方法
以上的枚举定义方法没有指定底层的数据类型,现在苹果的枚举都是这样写的
typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
UITableViewCellStyleDefault,
UITableViewCellStyleValue1,
UITableViewCellStyleValue2,
UITableViewCellStyleSubtitle
};
第一个参数指明底层数据类型
在开发中,推荐使用NS_ENUM,确定类型,保证统一!
网友评论