用枚举值表示状态、选项、状态码

一、C语言中
 
1、C语言中的枚举类型enum。在以一系列常量来表示错误状态码或可组合的选项时,极宜使用枚举为其命名。
 
2、定义一个enum
 
enum personAgeState {
    personAgeStateLitter,
    personAgeStateBigger
};
 
@property (nonatomic, assign) enum personAgeState personAge;
 
enum personAgeState personAge = personAgeStateLitter;
 
3、可以使用typedef关键字重新定义枚举类型
 
enum personAgeState {
    personAgeStateLitter,
    personAgeStateBigger
};
typedef enum personAgeState personAgeState;
 
@property (nonatomic, assign) personAgeState personAge;
 
personAgeState personAge = personAgeStateLitter;
 
4、可以指明用何种“底层数据类型”来保存枚举类型的变量。这样做的好处是,可以向前声明枚举变量了。若不指定底层数据类型,则无法向前声明枚举类型,因为编译器不清楚底层数据类型的大小,所以在用到此枚举类型时,也就不知道究竟该给变量分配多少空间。
enum waitState : NSInteger {
    waitStateLitter = 2,
    waitStateStrong
};
 
@property (nonatomic, assign) enum waitState : NSInteger waitState;
 
enum waitState : NSInteger waitState1 = waitStateLitter;
 
5、在定义选项的时候,应该使用枚举类型。若这些选项可以彼此组合,则更应如此。只要枚举定义得对,各选项之间就可以通过 “按位或操作符”来组合。
enum UIViewAutoresizing {
    UIViewAutoresizingNone                 = 0,
    UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
    UIViewAutoresizingFlexibleWidth        = 1 << 1,
    UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
    UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
    UIViewAutoresizingFlexibleHeight       = 1 << 4,
    UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
如果把传递给某个方法的选项表示为枚举类型,而多个选项又可以同时使用,那么就将各选项值定义为2的幂,以便通过按位或操作将其组合起来。
 
二、OC语言中
Foundation框架中定义了一些辅助的宏,用这些宏来定义枚举类型时,也可以制定用于保存枚举值的底层数据类型。这些宏具备向后兼容能力,如果目标平台的编译器支持新标准,那就使用新式语法,否则改用旧式语法。
1、
typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {
    UIViewAnimationTransitionNone,
    UIViewAnimationTransitionFlipFromLeft,
    UIViewAnimationTransitionFlipFromRight,
    UIViewAnimationTransitionCurlUp,
    UIViewAnimationTransitionCurlDown,
};
上面用NS_ENUM宏所定义的枚举类型展开之后就是:
typedef enum UIViewAnimationTransition : NSInteger UIViewAnimationTransition;
enum UIViewAnimationTransition : NSInteger {
    UIViewAnimationTransitionNone,
    UIViewAnimationTransitionFlipFromLeft,
    UIViewAnimationTransitionFlipFromRight,
    UIViewAnimationTransitionCurlUp,
    UIViewAnimationTransitionCurlDown,
};
 
2、
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
    UIViewAutoresizingNone                 = 0,
    UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
    UIViewAutoresizingFlexibleWidth        = 1 << 1,
    UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
    UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
    UIViewAutoresizingFlexibleHeight       = 1 << 4,
    UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
 
三、枚举值与switch语句
在处理枚举类型的switch语句中不要实现default分支。这样的话,假如新枚举之后,编译器就会提示开发者:switch语句并未处理所有枚举。
 
原文地址:https://www.cnblogs.com/cchHers/p/6946579.html