枚举只是一种常量命名方式
- 某种状态值可以使用枚举
typedef NS_ENUM(NSInteger,LoginState){
LoginStateSuccess,
LoginStateFail,
};
- 在定义选项的时候,若这些选项可以彼此组合,各个选项之间可以通过按“按位或操作符”来组合,那么枚举值中可定义为2的幂
typedef NS_ENUM(NSInteger, UIInterfaceOrientation) {
UIInterfaceOrientationUnknown = 0,
UIInterfaceOrientationPortrait = 1 << 0,
UIInterfaceOrientationPortraitUpsideDown = 1 << 1,
UIInterfaceOrientationLandscapeLeft = 1 << 2,
UIInterfaceOrientationLandscapeRight = 1 << 3,
}
- (UIInterfaceOrientation)supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window{
return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;
}
- 在switch中使用枚举来定义状态机,最好不要用default,如果使用default,当枚举中添加一个值,编译器不会发出警告,但是switch中不加default,编译器会有警告提示信息
typedef NS_ENUM(NSInteger,LoginState){
LoginStateSuccess,
LoginStateFail,
};
- (void)change:(LoginState)state{
switch (state) {
case LoginStateFail:
break;
case LoginStateSuccess:
break;
}
}
- 重点
- 应该用枚举值来表示状态机的状态
- 多个选项可以同时存在,可以使用枚举类型,可以将各选项值定义为2的幂,以便通过按位或操作将其组合
3.处理switch语句中不要带有default分支,这样加入新枚举值之后,编译器会提示开发者
参考
Effective+Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法