enum 枚舉是一種常量的命名方式,命名出來的代碼易讀懂。編譯器會為枚舉分配一個獨有的編號,從 0 開始,每個枚舉會遞增1。
1、表示狀態
定義語法:
enum CDState{
CDStateON,
CDStateOFF,
};
不過這每次調用的時候就比較凡繁瑣:
enum CDStatestate = CDStateON;
可使用 typedef 關鍵字來重新定義枚舉類型
定義語法:
enum CDState{
CDStateON,
CDStateOFF,
};
typedef enum CDState CDCDState;
重命名后,就可以使用 CDCDState 來代替定義枚舉的繁瑣類型
CDCDState state = CDStateOFF;
定義枚舉的時候可以定義底層變量的類型,可手動指定某個枚舉成員的值,其后面的枚舉就會順勢遞增1。
enumCDState:NSInteger{
CDStateON =2,
CDStateOFF,
};
2、表示選項
定義選項的時候,這些選項可以彼此組合。各選項之間可通過“按位或”來組合。例如:
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
UIViewAutoresizingNone? ? ? ? ? ? ? ? = 0,
UIViewAutoresizingFlexibleLeftMargin? = 1 << 0,
UIViewAutoresizingFlexibleWidth? ? ? ? = 1 << 1,
UIViewAutoresizingFlexibleRightMargin? = 1 << 2,
UIViewAutoresizingFlexibleTopMargin? ? = 1 << 3,
UIViewAutoresizingFlexibleHeight? ? ? = 1 << 4,
UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
每個選項都可以啟用或禁用,使用按位或可組合多個選項。例如:
UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight
如下圖展示枚舉值二進制:
3、表示狀態
可以把邏輯含義相似的一組狀態碼放在同一個枚舉集里面表示。
通常習慣在 switch 語句中添加 default 。如果使用枚舉定義狀態,最好不要使用 default ,否則會認為在后面又添加了一種狀態,編譯器會發出警告信息,提示新加入的狀態未在 switch 分支中處理。假如再添加default ,就會處理這個新的狀態。從而導致編譯器不發警告信息。通常要確保 switch 語句能正確處理所有樣式。
總結
1、使用枚舉表示狀態機的狀態、傳遞給方法的選項和狀態碼等值,并起易懂的名字。
2、若把傳遞給某個方法的選項表示為枚舉類型。多個選項可以同時使用,可以將選項值定義為2的冪,方便通過按位或操作將其組合起來。
3、使用 NS_ENUM 和 NS_OPTIONS 宏來定義枚舉類型,并指明其底層數據類型。確保是開發者所選的底層數據類型,而不是采用編譯器所選的類型
4、處理枚舉類型的 switch 語句中不要實現 default 分支。