用枚举值表示状态、选项、状态码
一、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语句并未处理所有枚举。
 
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号