位移枚举

位移枚举

一. OC中常见的三种枚举

  1. C语言枚举

     // C语言枚举
     typedef enum : NSUInteger {
         FHDemoTypeA,
         FHDemoTypeB,
         FHDemoTypeC,
     } FHDemoType;
    
  2. OC枚举: 强烈建议大家在日常编程中使用OC枚举

     // OC枚举
     typedef NS_ENUM(NSUInteger, FHNSType) {
         FHNSTypeA,
         FHNSTypeB,
         FHNSTypeC,
     };
    
  3. 位移枚举: 用于多值判断

    • 位移枚举中使用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 *)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);
            }
        }

你可能感兴趣的:(位移枚举)