iOS列挙タイプenum,NS_ENUM,NS_OPTIONS

1998 ワード

萌妹gif
すでにこの妹に泣かれて、よし、くだらない話は多く言わないで、本題に入って、今日objective-cの中の列挙を紹介します
要約
  • まず、列挙値は整形(int)であり、
  • を初期化することなく、メモリの占有と列挙定義変数の解放に参加せずに直接使用できることを知っておく必要があります.
  • の3種類の列挙
  • enum iOS 6の前に一般的にCスタイルのenumキーワードを使用して列挙タイプ
  • を定義することができます.
    iOS 6の後に2つのマクロを導入して列挙を定義することは、実際にはenum定義とtypedefを1つにし、コードの観点から異なるマクロを用いて区別される.
  • NS_ENUMの一般的な列挙定義はUImitを参照することができる.Frameworkで
  • NS_OPTIONSビット演算および特殊列挙の定義.いつこの方法を使いますか?それは、1つの列挙変数が複数の列挙値を表す場合である.一つの列挙変数に複数の列挙値を与える場合、原理は個々の列挙値を加算するだけである.加算後、新しい値が得られると、この値の一意性を保証するために、ビット演算の重要な役割が現れる.ビット演算は、列挙値の組み合わせの一意性を確保することができる.ビット演算の算出方式は、バイナリを10進数に変換するものであるため、すなわち、列挙値の中には、算出後の10進数値がアクセスする.例えば、上記のビット演算方式で列挙を設定後、印刷された列挙値はそれぞれ:1 2 4 8 16という5つの数字であり、どのように組み合わせても同じ2つの数字は生成されない.

  • この2つのマクロの定義はFoundation.フレームワークのNSObjCRuntime.h中:#if(_cplusplus&&_cplusplus>=201033 L&(_has_extension(cxx_strong_enums)|_has_feature(objc_fixed_enum))) || (!__cplusplus && __has_feature(objc_fixed_enum)) #define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type #if (__cplusplus) #define NS_OPTIONS(_type, _name) _type _name; enum : _type #else #define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type #endif#else #define NS_ENUM(_type, _name) _type _name; enum #define NS_OPTIONS(_type, _name) _type _name; enum #endif
    ひとつ挙げる
    //            
    typedef NS_ENUM(NSInteger, RWTLeftMenuTopItemType) {
     RWTLeftMenuTopItemMain, 
     RWTLeftMenuTopItemShows,
     RWTLeftMenuTopItemSchedule 
    }; 
    typedef NS_ENUM(NSInteger, RWTGlobalConstants) { 
    RWTPinSizeMin = 1, 
    RWTPinSizeMax = 5, 
    RWTPinCountMin = 100, 
    RWTPinCountMax = 500
    }; 
    typedef NS_OPTIONS(NSInteger, Test) {
    
    TestA = 1, //1 1 1         1
    
    TestB = 1 << 1, //2 2 10     10   2
    
    TestC = 1 << 2, //4 3 100     10   4
    
    TestD = 1 << 3, //8 4 1000     10   8
    
    TestE = 1 << 4 //16 5 10000     10   16
    
    };
    //      
    enum GlobalConstants { 
    kMaxPinSize = 5, 
    kMaxPinCount = 500
    };
    

    共に学び、共に進歩し、がんばる.fighting