用枚舉表示狀態碼


枚舉只是一種常量命名方式。某個對象所經歷的各種狀態就可以定義為一個簡單的枚舉集。

比如說:

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語句並未處理所有分支。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM