位移枚举

作者: 面糊 | 来源:发表于2016-06-14 21:30 被阅读267次

    位移枚举

    一. 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<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);
              }
          }

    相关文章

      网友评论

        本文标题:位移枚举

        本文链接:https://www.haomeiwen.com/subject/jjvudttx.html