1. 程式人生 > >Enum枚舉

Enum枚舉

summer bject spring 變量 選項 void 數值 left 方式

前言

  • iOS 5.0 之後,提供了新的枚舉定義方式,定義枚舉的同時,可以指定枚舉中數據的類型。
typedef NS_OPTIONS(_type, _name) new;   -> 位移的,可以使用 按位或 設置數值
typedef NS_ENUM(_type, _name) new;      -> 數字的,直接使用枚舉設置數值
  • 位移型枚舉:
  • 使用 按位或 可以給一個參數同時設置多個 "類型"。在具體執行的時候,使用 按位與 可以判斷具體的 "類型"。
  • OC 中 64 位操作系統 NSInteger 64 位 - long => 能夠表示 64 種選項。通過位移設置,就能夠得到非常多的組合。
  • 對於位移枚舉類型,如果傳入 0,表示什麽附加操作都不做!=> 執行效率是最高的。如果開發中,看到位移的枚舉,同時不要做任何的附加操作,參數可以直接輸入 0!

1、C 樣式枚舉定義

  • 1.1 定義枚舉類型

    /*
    typedef enum new;
    new:枚舉類型的變量值列表
    C 樣式的枚舉默認枚舉類型變量值的格式為整型
    */
    typedef enum {
        AA,
        BB,
        CC
    } Name;
  • 1.2 判斷枚舉值

    - (void)studentWithName:(Name)name {
        switch (name) {
            case 0:
                NSLog(@"AA");
                break;
            case 1:
                NSLog(@"BB");
                break;
            case 2:
                NSLog(@"CC");
                break;
            default:
                break;
        }
    }
  • 1.3 設置枚舉的值

    [self studentWithName:1];
    [self studentWithName:CC];

2、數字型枚舉定義

  • 2.1 定義枚舉類型

    /*
        typedef NS_ENUM(_type, _name) new;                      
        _type:枚舉類型變量值的格式
        _name:枚舉類型的名字
        new:枚舉類型的變量值列表
    */
    
    typedef NS_ENUM(NSUInteger, Seasons) {
    
        spring = 0,
        summer,
        autumn,
        winter
    };
  • 2.2 判斷枚舉值

    - (void)selectWithSeasons:(Seasons)seasons {
    
        if (seasons == 1 || seasons == 2) {
            NSLog(@"comfortable");
        } 
        else {
            NSLog(@"cold");
        }
    }
  • 2.3 設置枚舉的值

    [self selectWithSeasons:0];
    [self selectWithSeasons:autumn];

3、位移型枚舉定義

  • 3.1 定義枚舉類型

    /*
        typedef NS_OPTIONS(_type, _name) new;
    
        _type:枚舉類型變量值的格式
        _name:枚舉類型的名字
        new:枚舉類型的變量值列表
    
        位移的枚舉判斷不能使用 else,否則會丟選項
    */
    
    typedef NS_OPTIONS(NSUInteger, ActionTypeOptions) {
    
        ActionTypeTop =     1 << 0,
        ActionTypeBottom =  1 << 1,
        ActionTypeLeft =    1 << 2,
        ActionTypeRight =   1 << 3
    };
  • 3.2 判斷枚舉值

    - (void)movedWithActionType:(ActionTypeOptions)type {
    
        if (type == 0) {
            return;
        }
    
        if (type & ActionTypeTop) {
            NSLog(@"上 %li", type & ActionTypeTop);
        }
        if (type & ActionTypeBottom) {
            NSLog(@"下 %li", type & ActionTypeBottom);
        }
        if (type & ActionTypeLeft) {
            NSLog(@"左 %li", type & ActionTypeLeft);
        }
        if (type & ActionTypeRight) {
            NSLog(@"右 %li", type & ActionTypeRight);
        }
    }
  • 3.3 設置枚舉的值

    [self movedWithActionType:0];
    
    [self movedWithActionType:ActionTypeLeft | ActionTypeTop | ActionTypeBottom | ActionTypeRight];

Enum枚舉