ios开发系列之枚举类型的使用
2015-09-14 19:10
423 查看
枚举值 ,它是一个整形(int) , 并且,它不参与内存的占用和释放,枚举定义变量即可直接使用,不用初始化.
在代码中使用枚举的目的只有一个,那就是增加代码的可读性
枚举的定义还支持位运算的方式定义,如下:
等于号后面必须等于1
什么时候要用到这种方式呢?
那就是一个枚举变量可能要代表多个枚举值的时候. 其实给一个枚举变量赋予多个枚举值的时候,原理只是把各个枚举值加起来罢了.当加起来以后,就获取了一个新的值,那么为了保证这个值的唯一性,这个时候就体现了位运算的重要作用.
位运算可以确保枚举值组合的唯一性
因为位运算的计算方式是将二进制转换成十进制,也就是说,枚举值里面存取的是 计算后的十进制值.打个比方:通过上面的位运算方式设定好枚举以后,打印出来的枚举值分别是: 1 2 4 8 16 这5个数字,无论你如何组合在一起,也不会产生两个同样的数字.
下面是系统文件的两种不同的枚举写法
在代码中使用枚举的目的只有一个,那就是增加代码的可读性
enum是枚举类型,用来定义一系列宏定义常量,相当于一系列的
#define xx xx,第一个值默认从0 开始,其后依次加一, 可以对每一个枚举元素赋值
typedef enum { messageTypeMe , // = 0 表示自己 messageTypeOther // = 1 表示对方 }messageType;
messgeType type中
type的值只有0 和 1, 我们可以通过
type的值来进行控制x的值
int x = type == messageTypeMe ? 100 : 200 ;
枚举的定义还支持位运算的方式定义,如下:
typedef NS_ENUM(NSInteger, Test) { TestA = 1, //1 1 1 TestB = 1 << 1, //2 2 10 转换成 10进制 2 TestC = 1 << 2, //4 3 100 转换成 10进制 4 TestD = 1 << 3, //8 4 1000 转换成 10进制 8 TestE = 1 << 4 //16 5 10000 转换成 10进制 16 };
等于号后面必须等于1
什么时候要用到这种方式呢?
那就是一个枚举变量可能要代表多个枚举值的时候. 其实给一个枚举变量赋予多个枚举值的时候,原理只是把各个枚举值加起来罢了.当加起来以后,就获取了一个新的值,那么为了保证这个值的唯一性,这个时候就体现了位运算的重要作用.
位运算可以确保枚举值组合的唯一性
因为位运算的计算方式是将二进制转换成十进制,也就是说,枚举值里面存取的是 计算后的十进制值.打个比方:通过上面的位运算方式设定好枚举以后,打印出来的枚举值分别是: 1 2 4 8 16 这5个数字,无论你如何组合在一起,也不会产生两个同样的数字.
NS_OPTIONS一般用来定义位运算的枚举值
NS_ENUM是通用情况,两者本质一样
typedef NS_ENUM(NSInteger,UIButtonType){ };相当于typedef enum { }UIButtonType;
下面是系统文件的两种不同的枚举写法
typedef NS_ENUM(NSInteger, UIButtonType) { UIButtonTypeCustom = 0, // no button type UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS(7_0), // standard system button UIButtonTypeDetailDisclosure, UIButtonTypeInfoLight, UIButtonTypeInfoDark, UIButtonTypeContactAdd, UIButtonTypeRoundedRect = UIButtonTypeSystem, // Deprecated, use UIButtonTypeSystem instead };
typedef NS_OPTIONS(NSUInteger, UIControlState) { UIControlStateNormal = 0, UIControlStateHighlighted = 1 << 0, // used when UIControl isHighlighted is set UIControlStateDisabled = 1 << 1, UIControlStateSelected = 1 << 2, // flag usable by app (see below) UIControlStateApplication = 0x00FF0000, // additional flags available for application use UIControlStateReserved = 0xFF000000 // flags reserved for internal framework use };
相关文章推荐
- iOS 页面显示在键盘之上
- 第三方登录
- iOS触摸事件总结
- IOS开发中的kvo以及kvc的理解
- ios推送
- NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
- ios开发日记- 5 屏幕截图
- IOS从视频中获取截图
- iOS开发:利用SDWebImage实现图片加载与缓存
- iOS cocoapods
- iOS开发:一个瀑布流的设计与实现(已实现缓存池功能,该功能使得瀑布流cell可以循环利用)
- (转)27个提升效率的iOS开源库推荐
- IOS开发模块总结(二)后台运行程序(1) 后台运行程序详解(二)
- iOS 计算年龄
- IOS开发模块总结(二)后台运行程序(1) 后台运行程序详解(一)
- iOS开发的22个奇谲巧技
- iOS开发之摇一摇功能的实现
- iOS ios与js交互,获取webview完整url,title,获取元素并赋值跳转
- iOS开发--touchID指纹识别
- ios