3 回答

TA貢獻1783條經(jīng)驗 獲得超4個贊
三件事正在這里聲明:匿名枚舉類型聲明,ShapeType
在聲明該匿名枚舉一個typedef和三個名字kCircle
,kRectangle
和kOblateSpheroid
被聲明為整型常量。
讓我們打破它。在最簡單的情況下,枚舉可以聲明為
enum tagname { ... };
這聲明了帶有標記的枚舉tagname
。在C和Objective-C(但不是 C ++)中,對此的任何引用都必須以enum
關(guān)鍵字開頭。例如:
enum tagname x; // declare x of type 'enum tagname'tagname x; // ERROR in C/Objective-C, OK in C++
為了避免必須在enum
任何地方使用關(guān)鍵字,可以創(chuàng)建typedef:
enum tagname { ... };typedef enum tagname tagname; // declare 'tagname' as a typedef for 'enum tagname'
這可以簡化為一行:
typedef enum tagname { ... } tagname; // declare both 'enum tagname' and 'tagname'
最后,如果我們不需要能夠使用enum tagname
與enum
關(guān)鍵字,我們可以使enum
匿名的,并且只與typedef名稱聲明它:
typedef enum { ... } tagname;
現(xiàn)在,在這種情況下,我們聲明ShapeType
是匿名枚舉的typedef名稱。 ShapeType
實際上只是一個整數(shù)類型,且只能用于聲明持有在聲明中列出的值中的一個變量(即,一kCircle
,kRectangle
和kOblateSpheroid
)。但是,您可以ShapeType
通過強制轉(zhuǎn)換為變量賦值,因此在讀取枚舉值時必須小心。
最后kCircle
,kRectangle
和kOblateSpheroid
被聲明為全局命名空間的整型常量。由于未指定特定值,因此將它們分配給以0開頭的連續(xù)整數(shù),因此kCircle
為0,kRectangle
為1,kOblateSpheroid
為2。

TA貢獻1840條經(jīng)驗 獲得超5個贊
Apple建議在Xcode 4.4之后定義這樣的枚舉:
typedef enum ShapeType : NSUInteger { kCircle, kRectangle, kOblateSpheroid} ShapeType;
它們還提供了一個方便的宏NS_ENUM:
typedef NS_ENUM(NSUInteger, ShapeType) { kCircle, kRectangle, kOblateSpheroid};
這些定義提供更強的類型檢查和更好的代碼完成。我找不到NS_ENUM的官方文檔,但您可以在此處觀看WWDC 2012會議中的“Modern Objective-C”視頻。
UPDATE:鏈接到官方文檔在這里。

TA貢獻1875條經(jīng)驗 獲得超5個贊
枚舉聲明了一組有序值 - typedef只是為此添加了一個方便的名稱。第一個元素是0等
typedef enum {Monday=1,...} WORKDAYS;WORKDAYS today = Monday;
以上只是shapeType標簽的枚舉。
- 3 回答
- 0 關(guān)注
- 817 瀏覽
添加回答
舉報