枚舉只是一種常量命名方式。某個對象所經歷的各種狀態就可以定義為一個簡單的枚舉集。
比如說:
enum EOCConnectionState { EOCConnectionStateDisconnected, EOCConnectionStateConnecting, EOCConnectionStateConnected, };
由於每種狀態都用一個便於理解的值來表示,所以這樣寫出來的代碼更易讀懂。
編譯器會為枚舉分配一個獨有的編號,從0開始,每個枚舉遞增1。
實現枚舉所用的數據類型取決於編譯器,不過其二進制位的個數必須能完全表示下枚舉編號才行。
在上圖中,由於最大編號是2,所以使用1個字節的char類型即可。
但是這種寫法非常不簡潔。
enum EOCConnectionState state = EOCConnectionStateDisConnected;
所以我們常用以下這種寫法
typedef NS_ENUM(NSUInteger, EOCConnectionState){
EOCConnectionStateDisconnected,
EOCConnectionStateConnecting,
EOCConnectionStateConnected,
};
要點:
1.應該用枚舉來表示狀態機的狀態、狀態碼等值,給這些值起個易懂的名字
2.如果把傳遞給某個方法的選項表示為枚舉類型,而多個選項又可同時使用,那么就將各選項值定義為2的冪,以便通過按位或操作將其組合起來
3.用NS_ENUM宏來定義枚舉類型,並指明底層數據類型,這樣做可以確保枚舉是開發者選用的數據類型實現的,而不會采用編譯器所選的類型。
4.在處理枚舉類型的switch語句時,不要實現default分支,這樣的話,加入新枚舉之后,就會提示開發者:switch語句並未處理所有分支。
