枚舉只是一種常量命名方式,入下列枚舉表示鏈接狀態(tài)
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標準修訂類枚舉的某些特性,其中一項就是可以指明用何種“底層數(shù)據(jù)類型”來保存枚舉類型的變量。這樣的好處是,可以向前申明枚舉變量。如下enum EOCConnectionState:NSInteger{ EOCConnectionStateDisconnected = 1, EOCConnectionStateConnecting, EOCConnectionStateConnected,};上述代碼把EOCConnectionStateDisconnected的值設(shè)為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框架中定義了一寫輔助的宏,用這些宏來定義枚舉類型時,也可以指定用于保存枚舉值的底層數(shù)據(jù)類型,這些宏具有向后兼容能力
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本質(zhì)是一樣的,僅僅從字面上來區(qū)分其用途。NS_ENUM是通用情況,NS_OPTIONS一般用來定義具有位移操作或特點的情況。注:我們總習慣在switch語句中加上default分支,然而,若是枚舉來定義狀態(tài)機,最好不要有default分支,這樣的話,如果稍后又加了一種狀態(tài),那么編譯器就會發(fā)出浸膏信息,提示新加入的狀態(tài)并未在switch分支中處理
新聞熱點
疑難解答
圖片精選