iOS枚舉類型enum,NS_ENUM,NS_OPTIONS

萌妹.gif

已被此妹萌哭,好了,廢話不多說,進(jìn)入正題,今天介紹一下objective-c中的枚舉

提要

  • 首先要知道的是,枚舉值 它是一個整形(int) 并且,它不參加內(nèi)存的占用和釋放 枚舉定義變量即可直接使用,不用初始化

  • 三種類型的枚舉

    • enum 在iOS6之前一般我們采用C風(fēng)格的enum關(guān)鍵字可以定義枚舉類型

    在iOS6之后引入兩個宏來定義枚舉實際上是將enum定義和typedef合二為一,并且采用不同的宏來從代碼角度來區(qū)分。

    • NS_ENUM 普通枚舉定義可參見UIKit.Framework中
    • NS_OPTIONS 位運(yùn)算及特殊枚舉的定義。什么時候要用到這種方式呢? 那就是一個枚舉變量可能要代表多個枚舉值的時候. 其實給一個枚舉變量賦予多個枚舉值的時候,原理只是把各個枚舉值加起來罷了. 當(dāng)加起來以后,就獲取了一個新的值,那么為了保證這個值的唯一性,這個時候就體現(xiàn)了位運(yùn)算的重要作用. 位運(yùn)算可以確保枚舉值組合的唯一性. 因為位運(yùn)算的計算方式是將二進(jìn)制轉(zhuǎn)換成十進(jìn)制,也就是說,枚舉值里面存取的是 計算后的十進(jìn)制值. 打個比方: 通過上面的位運(yùn)算方式設(shè)定好枚舉以后,打印出來的枚舉值分別是: 1 2 4 8 16 這5個數(shù)字,無論你如何組合在一起,也不會產(chǎn)生兩個同樣的數(shù)字.

    這兩個宏的定義在Foundation.framework的NSObjCRuntime.h中:
    #if (__cplusplus && __cplusplus >= 201103L && (__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 轉(zhuǎn)換成 10進(jìn)制 2

TestC = 1 << 2, //4 3 100 轉(zhuǎn)換成 10進(jìn)制 4

TestD = 1 << 3, //8 4 1000 轉(zhuǎn)換成 10進(jìn)制 8

TestE = 1 << 4 //16 5 10000 轉(zhuǎn)換成 10進(jìn)制 16

};
//不推薦的方式
enum GlobalConstants { 
kMaxPinSize = 5, 
kMaxPinCount = 500
};

共同學(xué)習(xí)共同進(jìn)步,加油。fighting??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容