今天和大家一起来学习一下iOS位移枚举的简单使用,有疏忽的地方,还望各位不吝赐教。
一、枚举的作用
在代码中使用枚举目的是为了增加代码的可读性。
二、枚举的实现方式
1、实现方式
// 第一种实现方式 C语言实现枚举的方式
typedef enum {
GHTypeUp,
GHTypeDown,
}GHType;
// 第二种实现方式 OC实现枚举的方式
typedef NS_ENUM(NSUInteger, GHDemoType) {
GHDemoTypeUp,
GHDemoTypeDown
};
/**
* 第三种方式,位移枚举 ,OC实现枚举的方式
* 优点:一个参数可以传递多个值
* 说明:如果是位移枚举,观察第一个枚举值。如果该枚举值=0 那么默认传递0座位参数,如果传递0,效率最高
*/
typedef NS_OPTIONS(NSUInteger, GHOpertionType) {
GHOpertionTypeUp = 1<<0,
GHOpertionTypeDown = 1<<1,
GHOpertionTypeLeft = 1<<2,
GHOpertionTypeRight = 1<<3
};
2、举个栗子
// 方法调用
[self demo:GHOpertionTypeUp | GHOpertionTypeDown | GHOpertionTypeLeft | GHOpertionTypeRight];
// 如果是位移枚举,观察第一个枚举值。如果该枚举值=0 那么默认传递0座位参数,如果传递0,效率最高
[self demo:0];
// 方法实现
- (void)demo:(GHOpertionType)type{
if (type & GHOpertionTypeUp) {
NSLog(@"GHOpertionTypeUp");
}
if (type & GHOpertionTypeDown) {
NSLog(@"GHOpertionTypeDown");
}
if (type & GHOpertionTypeLeft) {
NSLog(@"GHOpertionTypeLeft");
}
if (type & GHOpertionTypeRight) {
NSLog(@"GHOpertionTypeRight");
}
}
3、位移枚举的解释
/**
* 准备:首先你要知道这些知识。
*
* 1、<< 是左移运算符 : 用来将一个数的各二进制位全部左移若干位。
* 举个栗子 :0000 0001 代表 二进制中的 1
* 左移一位 <<1
* 就会变成 :0000 0010 代表 二进制中的 2
* 简便算法:8 << n的值为8*(2^n)
*
* 2、按位与运算 :& 1 & 1 = 1 1 & 0 = 0 0 & 0 = 0
* 总结规则:有0则为0
*
* 3、按位或运算: | 1 | 1= 1 1 | 0 = 1 0 | 0= 0
* 总结规则: 有1则为1
*
* 以上可以推导出:
* GHOpertionTypeUp : 0000 0001
* GHOpertionTypeDown : 0000 0010
* GHOpertionTypeLeft : 0000 0100
* GHOpertionTypeRight : 0000 1000
* 依据3的知识可以得到以上按位或运算后的结果为 : 0000 1111
* 依据2的知识当此值和GHOpertionTypeUp进行按位与运算时得到的结果为 : 0000 0001 即得到了GHOpertionTypeUp本身,以此类推
* 综上所述可以解释位移枚举为什么可以一个参数可以传递多个值
*/