iOS枚舉的定義與使用

開發中使用枚舉的目的——爲了增長代碼的可讀性markdown

分類

NS_ENUM、NS_OPTIONS 這二者在本質上並無差異,都是用於定義枚舉類型。但在使用中,NS_ENUM多用於通常枚舉,而NS_OPTIONS則多用於帶有移位運算的枚舉。atom

定義

在類的.h文件中,在interface和import之間。spa

一. NS_ENUM,定義狀態等普通枚舉code

typedef NS_ENUM(NSUInteger, myKeyBoardType) {
    KeyBoardTypeDefault = 0,
    KeyBoardTypeNumber,
    KeyBoardTypeEmail
};
····
// myKeyBoardType爲枚舉命名,對應於某個屬性
@property(nonatomic,assign)NSUInteger myKeyBoardType;

複製代碼

狀態枚舉,不能共存,只能存在枚舉值的其中一個。orm

二. NS_OPTIONS,定義選項 枚舉的定義還支持 位運算的方式定義ci

typedef NS_OPTIONS(NSUInteger, TTGDirection) {
    TTGDirectionNone = 0,
    TTGDirectionTop = 1 << 0,   //2 2 10 轉換成 10進制 2
    TTGDirectionLeft = 1 << 1,    //4 3 100 轉換成 10進制 4
    TTGDirectionRight = 1 << 2,    //8 4 1000 轉換成 10進制 8
    TTGDirectionBottom = 1 << 3    //16 5 10000 轉換成 10進制 16
};
複製代碼

這裏的選項是用位運算的方式定義的,選項枚舉中各值能夠同時存在。開發

應用場景:一個枚舉變量可能要表明多個枚舉值的時候it

其實給一個枚舉變量賦予多個枚舉值的時候,原理只是把各個枚舉值加起來罷了。當加起來之後,就獲取了一個新的值,那麼爲了保證這個值的惟一性,這個時候就體現了位運算的重要做用。位運算能夠確保枚舉值組合的惟一性。 由於位運算的計算方式是將二進制轉換成十進制,也就是說,枚舉值裏面存取的是 計算後的十進制值。打個比方: 經過上面的位運算方式設定好枚舉之後,打印出來的枚舉值分別是: 1 2 4 8 16 這5個數字,不管你如何組合在一塊兒,也不會產生兩個一樣的數字。io

###使用 在須要的地方導入類文件,table

外界對屬性myKeyBoardType進行賦值時,會直接提示枚舉中的選項。

應用——根據不一樣類型建立按鈕

結合switch case 結構使用

typedef NS_ENUM(NSUInteger, MKButtonEdgeInsetsStyle) {
    MKButtonEdgeInsetsStyleTop, // image在上,label在下
    MKButtonEdgeInsetsStyleLeft, // image在左,label在右
    MKButtonEdgeInsetsStyleBottom, // image在下,label在上
    MKButtonEdgeInsetsStyleRight // image在右,label在左
};

@interface UIButton (ImageTitleSpacing)
@end
複製代碼

//用「或」運算同時賦值多個選項
TTGDirection direction = TTGDirectionTop | TTGDirectionLeft | TTGDirectionBottom;
 
//用「與」運算取出對應位
if (direction & TTGDirectionTop) {
    NSLog(@"top");
}
if (direction & TTGDirectionLeft) {
    NSLog(@"left");
}
if (direction & TTGDirectionRight) {
    NSLog(@"right");
}
if (direction & TTGDirectionBottom) {
    NSLog(@"bottom");

複製代碼
相關文章
相關標籤/搜索