枚举表示状态,选项,状态码
来源:互联网 发布:网络大电影发行协议 编辑:程序博客网 时间:2024/05/18 03:42
之前也没看明白枚举的这个用法,百度了好久,然后发现有篇文章讲的还不错,地址下面给出..
枚举只是一种常量命名方式。某个对象所经历的各种状态就可以定义为一个简单的枚举集(enumeration set)。比如说,可以用下列枚举表示“套接字连接”(socket connection)的状态:
enum EOCConnectionState {
EOCConnectionStateDisconnected,
EOCConnectionStateConnecting,
EOCConnectionStateConnected,
};
由于每种状态都用一个便于理解的值来表示,所以这样写出来的代码更易读懂。编译器会为枚举分配一个独有的编号,从0开始,每个枚举递增1。实现枚举所用的数据类型取决于编译器,不过其二进制位(bit)的个数必须能完全表示下枚举编号才行。在前例中,由于最大编号是2,所以使用1个字节的char类型即可。
然而定义枚举变量的方式却不太简洁,要依如下语法编写:
enum EOCConnectionState state = EOCConnectionStateDisconnected;
若是每次不用敲入enum而只需写EOCConnectionState就好了。要想这样做,则需使用typedef关键字重新定义枚举类型:
enum EOCConnectionState {
EOCConnectionStateDisconnected,
EOCConnectionStateConnecting,
EOCConnectionStateConnected,
};
typedef enum EOCConnectionState EOCConnectionState;
现在可以用简写的EOCConnectionState来代替完整的enum EOCConnectionState了:
EOCConnectionState state = EOCConnectionStateDisconnected;
C++11标准修订了枚举的某些特性。其中一项改动是:可以指明用何种“底层数据类型”(underlying type)来保存枚举类型的变量。这样做的好处是,可以向前声明枚举变量了。若不指定底层数据类型,则无法向前声明枚举类型,因为编译器不清楚底层数据类型的大小,所以在用到此枚举类型时,也就不知道究竟该给变量分配多少空间。
指定底层数据类型所用的语法是:
enum EOCConnectionStateConnectionState : NSInteger { /* ... */ };
上面这行代码确保枚举的底层数据类型是NSInteger。也可以在向前声明时指定底层数据类型:
enum EOCConnectionStateConnectionState : NSInteger;
还可以不使用编译器所分配的序号,而是手工指定某个枚举成员所对应的值。语法如下:
enum EOCConnectionStateConnectionState {
EOCConnectionStateDisconnected = 1,
EOCConnectionStateConnecting,
EOCConnectionStateConnected,
};
上述代码把EOCConnectionStateDisconnected的值设为1,而不使用编译器所分配的0。如前所述,接下来几个枚举的值都会在上一个的基础上递增1。比如说,EOCConnectionState-Connected的值就是3。
还有一种情况应该使用枚举类型,那就是定义选项的时候。若这些选项可以彼此组合,则更应如此。只要枚举定义得对,各选项之间就可通过“按位或操作符”(bitwise OR operator)来组合。例如,iOS UI框架中有如下枚举类型,用来表示某个视图应该如何在水平或垂直方向上调整大小:
enum UIViewAutoresizing {
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,
UIViewAutoresizingFlexibleWidth = 1 << 1,
UIViewAutoresizingFlexibleRightMargin = 1 << 2,
UIViewAutoresizingFlexibleTopMargin = 1 << 3,
UIViewAutoresizingFlexibleHeight = 1 << 4,
UIViewAutoresizingFlexibleBottomMargin = 1 << 5,
}
每个选项均可启用或禁用,使用上述方式来定义枚举值即可保证这一点,因为在每个枚举值所对应的二进制表示中,只有1个二进制位的值是1。用“按位或操作符”可组合多个选项,例如:UIViewAutoResizingFlexibleWidth| UIViewAutoresizingFlexibleHeight。用“按位与操作符”(bitwise AND operator)即可判断出是否已启用某个选项:
enum UIViewAutoresizing resizing =
UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight;
if (resizing & UIViewAutoresizingFlexibleWidth) {
// UIViewAutoresizingFlexibleWidth is set
}
- 枚举表示状态,选项,状态码
- ios用枚举表示状态,选项,状态码
- iOS 高级开发技巧 1.熟悉Objective-C (五) 用枚举表示状态、选项、状态码
- Effective Objective-C 2.0 第5条:用枚举表示状态、选项、状态码
- 《Effective Objective-C 2.0》3、枚举类型表示状态、选项
- hdu 3935 -枚举+位运算表示状态和状态转移
- Code Fragment-使用枚举策略模式表示状态
- http状态码的表示含义
- HTTP常见状态码及表示意义
- 2.1 状态空间表示
- RFC859_Telnet状态选项
- TELNET的状态选项
- 客户端状态管理选项
- 服务器端状态管理选项
- uva1508(状态压缩 +枚举)
- hdu4770 状态压缩+枚举
- Hdu 4013 Distinct Subtrees (状态压缩枚举+树的最小表示)
- 知识表示:状态空间法
- Debug模式和Release模式区别
- memcache简单使用
- python pip国内镜像
- 二维码
- java项目上线一定要注意的问题
- 枚举表示状态,选项,状态码
- db_info.xml
- 关于iOS9 更新后,微博,微信 语言变成英语的问题
- Java中ClassPath的作用
- ubuntu openjdk-8-*安装和版本更新
- 领域驱动设计之领域模型
- spark core源码分析17 RDD相关API
- BZOJ 3991(dfs序 + LCA 公式推导)
- 多态