位移枚举
一. OC中常见的三种枚举
-
C语言枚举
// C语言枚举 typedef enum : NSUInteger { FHDemoTypeA, FHDemoTypeB, FHDemoTypeC, } FHDemoType;
-
OC枚举:
强烈建议大家在日常编程中使用OC枚举
// OC枚举 typedef NS_ENUM(NSUInteger, FHNSType) { FHNSTypeA, FHNSTypeB, FHNSTypeC, };
-
位移枚举:
用于多值判断
位移枚举中使用
1 << x
来设置枚举值1 << x
代表将二进制0001
中的1, 向左移动x位通过
按位或: |
, 拼接两个枚举值-
通过
按位与: &
, 可以从一个枚举值中取出不同的值// 位移枚举 typedef NS_OPTIONS(NSUInteger, FHActionType) { FHActionTypeTop = 1 << 0, FHActionTypeBottom = 1 << 1, FHActionTypeLeft = 1 << 2, FHActionTypeRight = 1 << 3, }; 0001 0010 | 拼接两个值 ------ 0011 0011 0010 & 通过一个值, 可以取出两个不同的值 ------ 0010 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { // 一般枚举值为0的,代表性能最好的枚举值 [self demo: FHActionTypeRight | FHActionTypeTop]; } - (void)demo:(int)type { if (type & FHActionTypeTop) { NSLog(@"向上--%ld", type & FHActionTypeTop); } if (type & FHActionTypeBottom) { NSLog(@"向下--%ld", type & FHActionTypeBottom); } if (type & FHActionTypeLeft) { NSLog(@"向左--%ld", type & FHActionTypeLeft); } if (type & FHActionTypeRight) { NSLog(@"向右--%ld", type & FHActionTypeRight); } }