我想声明一个自定义枚举,例如:
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之前它的语法不正确
答案 0 :(得分:15)
如果有人在我们未来的时间里发现这种情况,请更新此内容。
自iOS 6
/ Mac OS X 10.8
以来,新的NS_ENUM
和NS_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/
您可能还希望符合Apple的枚举命名惯例,并采用以下方式:
typedef NS_ENUM(NSInteger, MenuItemType) {
MenuItemTypeLinkInternal = 0,
MenuItemTypeLinkExternal = 1,
MenuItemTypeImage = 2,
MenuItemTypeMovie = 3,
MenuItemTypeMapQuery = 4
};
希望这会有所帮助。
答案 1 :(得分:10)
如果按此顺序将两个代码段放在一个文件中,则只需在枚举声明的末尾添加;
,您可能需要考虑使用枚举变量而不是指向枚举变量。
这给出了:
enum menuItemType
{
LinkInternal = 0,
LinkExternal = 1,
Image = 2,
Movie = 3,
MapQuery = 4
};
@interface MenuItem : NSObject {
NSMutableString *menuId;
NSMutableString *title;
enum menuItemType menuType;
NSMutableArray *subMenuItems;
}
答案 2 :(得分:5)
@mouviciel是对的,但我想我会告诉你,你想要的不是类属性,Objective-C不支持。类属性实际上是在类对象上设置的全局属性。你在想的是一个普通的属性(在类的实例上设置)。
此外,您的代码显示的是您只是使用实例变量。可以通过添加accessor / mutator方法将实例变量转换为属性,如下所示:
// after @interface {}
@property (readwrite) enum menuItemType menuType;
和
// under @implementation
@synthesize menuType;
这是一个捷径:编译器将生成访问和更改menuType
属性的正确方法。我不确定这对你有多大帮助,但它会帮助你理解Objective-C语义。