枚舉只是一種常量命名方式,入下列枚舉表示鏈接狀態
enum EOCConnectionState:NSInteger{    EOCConnectionStateDisconnected = 1,    EOCConnectionStateConnecting,    EOCConnectionStateConnected,};編譯器會為每一個枚舉分配一個獨有的編號,從0開始,然而定義沒巨變量的方式卻不太簡潔,如下enum EOCConnectionState state = EOCConnectionStateConnected;另一種方式
enum EOCConnectionState{    EOCConnectionStateDisconnected,    EOCConnectionStateConnecting,    EOCConnectionStateConnected,};typedef enum EOCConnectionState EOCConnectionState;這樣使用會簡潔一些EOCConnectionState state = EOCConnectionStateConnected;c++11標準修訂類枚舉的某些特性,其中一項就是可以指明用何種“底層數據類型”來保存枚舉類型的變量。這樣的好處是,可以向前申明枚舉變量。如下enum EOCConnectionState:NSInteger{    EOCConnectionStateDisconnected = 1,    EOCConnectionStateConnecting,    EOCConnectionStateConnected,};上述代碼把EOCConnectionStateDisconnected的值設為1而不是默認分配的0.
還有一種情況應該使用枚舉類型,那就是定義選項的時候,若這些選項可以彼此組合,則更應該如此,和選項之久可以通過“按位或操作符”來組合,例如
enum UIViewAutoresizing{    UIViewAutoresizingNone                 = 0,    UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,    UIViewAutoresizingFlexibleWidth        = 1 << 1,    UIViewAutoresizingFlexibleRightMargin  = 1 << 2,    UIViewAutoresizingFlexibleTopMargin    = 1 << 3,    UIViewAutoresizingFlexibleHeight       = 1 << 4,    UIViewAutoresizingFlexibleBottomMargin = 1 << 5};Foundation框架中定義了一寫輔助的宏,用這些宏來定義枚舉類型時,也可以指定用于保存枚舉值的底層數據類型,這些宏具有向后兼容能力
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};typedef NS_ENUM(NSUInteger, UIViewAutoresizing) {    EOCConnectionStateDisconnected ,    EOCConnectionStateConnecting,    EOCConnectionStateConnected,};從枚舉定義來看,NS_ENUM和NS_OPTIONS本質是一樣的,僅僅從字面上來區分其用途。NS_ENUM是通用情況,NS_OPTIONS一般用來定義具有位移操作或特點的情況。注:我們總習慣在switch語句中加上default分支,然而,若是枚舉來定義狀態機,最好不要有default分支,這樣的話,如果稍后又加了一種狀態,那么編譯器就會發出浸膏信息,提示新加入的狀態并未在switch分支中處理
新聞熱點
疑難解答