2010-01-22 135 views
11

我要聲明的自定義枚舉,如:如何聲明一個類屬性作爲枚舉類型

enum menuItemType 
{ 
    LinkInternal = 0, 
    LinkExternal = 1, 
    Image = 2, 
    Movie = 3, 
    MapQuery = 4 
} 

作爲一個類型我的對象:

@interface MenuItem : NSObject {  
    NSMutableString *menuId; 
    NSMutableString *title; 
    enum menuItemType *menuType; 
    NSMutableArray *subMenuItems; 
} 

但我不確定在哪裏需要放置枚舉的定義 - 如果我把它放在@interface之前它的語法不正確

回答

10

如果你按照這個順序把你的兩個代碼片斷放在一個文件中,你只需要在末尾添加一個; o f枚舉聲明,你可能想要考慮使用枚舉變量而不是指向枚舉變量的指針。

這給:

enum menuItemType 
{ 
    LinkInternal = 0, 
    LinkExternal = 1, 
    Image = 2, 
    Movie = 3, 
    MapQuery = 4 
}; 

@interface MenuItem : NSObject {  
    NSMutableString *menuId; 
    NSMutableString *title; 
    enum menuItemType menuType; 
    NSMutableArray *subMenuItems; 
} 
+0

謝謝我有點obj-c noob所以學得很快謝謝 – 2010-01-22 10:03:24

+1

這個答案已經過時,請使用現代的'NS_ENUM'。看@Zedenem答案 – 2014-12-16 08:30:24

+0

@ proca2.0 - 你說得對,謝謝你指出。實際上,Objective-C的一切都在過時。 – mouviciel 2014-12-16 08:37:52

5

@mouviciel是對的,但我想我應該讓你知道你想要的是不是一類的財產,一些在Objective-C不支持。類屬性實際上是在類對象上設置的全局屬性。你在想的是一個普通的舊屬性(設置在類的一個實例上)。

此外,你的代碼顯示的是,你只是使用一個實例變量。

// after @interface {} 
@property (readwrite) enum menuItemType menuType; 

// under @implementation 
@synthesize menuType; 

這是一個快捷方式::編譯器將生成適當的方法來訪問和更改menuType屬性實例變量可以通過添加存取/ mutator方法如下變成屬性。我不確定這對你是多麼有用,但它會幫助你理解Objective-C的語義。

15

只是更新這個以防有人在我們未來的時間絆倒了這一點。

由於iOS 6/Mac OS X 10.8,新NS_ENUMNS_OPTIONS宏聲明枚舉類型的首選方式。

在這種情況下,它看起來像:

typedef NS_ENUM(NSInteger, MenuItemType) { 
    LinkInternal = 0, 
    LinkExternal = 1, 
    Image = 2, 
    Movie = 3, 
    MapQuery = 4 
}; 

@interface MenuItem : NSObject {  
    NSMutableString *menuId; 
    NSMutableString *title; 
    MenuItemType menuType; 
    NSMutableArray *subMenuItems; 
} 

關於這個問題的一個很好的閱讀:http://nshipster.com/ns_enum-ns_options/

您可能還需要符合蘋果的慣例,枚舉命名和去的東西,如:

typedef NS_ENUM(NSInteger, MenuItemType) { 
    MenuItemTypeLinkInternal = 0, 
    MenuItemTypeLinkExternal = 1, 
    MenuItemTypeImage = 2, 
    MenuItemTypeMovie = 3, 
    MenuItemTypeMapQuery = 4 
}; 

希望這會有所幫助。

+0

因爲撞了一個這麼老的帖子而毆打你......但是真的,這太棒了。我剛剛轉換了我目前的項目。也喜歡NS_OPTIONS。 – Fogmeister 2014-01-21 11:14:30