天天看點

《Effective Objective-C 2.0》3、枚舉類型表示狀态、選項

第五條:使用枚舉類型表示狀态和選項,可以使代碼更加清晰,可讀性更好。

枚舉類型使用關鍵字enum定義,通常與typedef相結合,定義一組狀态或選項:

此後,就可以像内建類型一樣使用CustomState定義變量:

定義枚舉型資料時,可以指定每個枚舉成員的值,不過該方法一般不常用:

有些時候,可能需要對多個枚舉選項同時標明,那麼在定義枚舉變量時,将每個選項按位進行置1即可:

這樣,就可以用按位與的方式選擇多個選項:

在Foundation架構中,定義了兩種輔助宏:NS_ENUM和NS_OPTION。使用兩個宏定義枚舉變量的方法如下:

二者的差別在于當編譯器不按照C++規則進行編譯的時候展現。其原因在于,當存在按位或運算時,C++同非C++的處理辦法略有不同。如果按照C++模式,那麼編譯器不允許在枚舉中使用宏指定的類型來初始化枚舉類型成員。上面使用NS_ENUM定義的枚舉展開方式如:

此時若存在以下調用:

那麼當使用C++編譯時将出現無法使用int類型初始化CustomState類型的錯誤。是以當存在按位或操作對多個選項進行組合的情況下,應使用NS_OPTION宏來定義枚舉類型,如: