Effective Objective-C2.0读书小记(一)枚举

第五条:用枚举表示状态、选项、状态码

枚举类型:enum

①枚举是一种常量命名方式。比如说:

 enum EOCButtonType {
        EOCButtonTypeCustom,
        EOCButtonTypeSystem,
        EOCButtonTypeDetailDisclosure,
    };

编译器会为枚举分配一个独有的编号,从0开始,每个枚举递增+1。

当然,也可以不使用编译器分配的序号

 enum EOCButtonType {
       EOCButtonTypeCustom=1,
       EOCButtonTypeSystem,
       EOCButtonTypeDetailDisclosure,
    };

上述代码把的值设为1,而不使用编译器所分配的0,接下来的几个枚举的值都会在上一个的基础上递增1,比如说,EOCButtonTypeDetailDisclosure的值就是3.

定义枚举的方式:

enum EOCButtonType type =UIButtonTypeDetailDisclosure;

用typedef关键字重新定义:(这样就不用每次定义时敲入enum而只需要写EOCButtonType了)

typedef enum EOCButtonType EOCButtonType;
EOCButtonType state =EOCButtonTypeDetailDisclosure;

指定底层数据类型:(若不指定底层数据类型,则无法向前声明枚举类型)

enum EOCButtonType:NSInteger{/*...*/};

向前声明时指定底层数据类型

enum EOCButtonType:NSInteger;

② 定义选项时,应该使用枚举类型,若选项之间可以(通过按位或操作符)彼此组合,则更应如此。

 enum EOCButtonState {
        EOCControlStateNormal       = 0,
        EOCControlStateHighlighted  = 1 << 0,
        EOCControlStateDisabled     = 1 << 1,
        EOCControlStateSelected     = 1 << 2,
        EOCControlStateFocused      = 1 << 3,
    };

可以通过按位或操作符如下定义:

 enum EOCButtonState state= EOCControlStateHighlighted|
                               EOCControlStateSelected;
      
if(state&EOCControlStateNormal){
 //此判读没有任何意义,只是为了说明可以如此使用
}

每个枚举值所对应的二进制表示中,只有一个二进制位的值是1。如下:

EOCControlStateHighlighted   

EOCControlStateDisabled       

EOCControlStateSelected        

EOCControlStateFocused        

用按位或操作符可组合多选项,例如:EOCControlStateHighlighted | EOCControlStateSelected  

其二进制值为:

Foundation框架中定义了一些辅助的宏。

NS_ENUM(枚举不需要互相组合)

typedef NS_ENUM(NSInteger, UIControlContentVerticalAlignment) {
    UIControlContentVerticalAlignmentCenter  = 0,
    UIControlContentVerticalAlignmentTop     ,
    UIControlContentVerticalAlignmentBottom  ,
    UIControlContentVerticalAlignmentFill    ,
};

NS_OPTIONS(需要按位或操作来组合的枚举)

typedef NS_OPTIONS(NSUInteger, UIControlState) {
    UIControlStateNormal       = 0,
    UIControlStateHighlighted  = 1 << 0,                
    UIControlStateDisabled     = 1 << 1,
    UIControlStateSelected     = 1 << 2,                  
    UIControlStateFocused      = 1 << 3, 
};

这些宏可以指定用于保存枚举值的底层数据类型,具备向后兼容能力(如果目标平台的编译器支持新标准,那就使用新式语法,否则改用旧式语法)

③在switch语句中,枚举的使用

switch (_buttonType) {
        case UIButtonTypeCustom:
            //执行代码
            break;
        case UIButtonTypeSystem:
            //执行代码
            break;
        case UIButtonTypeDetailDisclosure:
            //执行代码
            break;
    }

在switch语句中最好不要有default分支。这样的话,如果之后又新增一种状态,那么编译器就会发出警告信息,提示新加入的状态并未在switch分支中处理。假如写上了default分支,那么它就会处理这个新状态,从而导致编译器不发警告信息。

 

转载于:https://my.oschina.net/sgcllr/blog/788490

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值