Ant*_*ain 11 iphone objective-c
我想声明一个自定义枚举,例如:
enum menuItemType
{
LinkInternal = 0,
LinkExternal = 1,
Image = 2,
Movie = 3,
MapQuery = 4
}
Run Code Online (Sandbox Code Playgroud)
作为我的对象的类型:
@interface MenuItem : NSObject {
NSMutableString *menuId;
NSMutableString *title;
enum menuItemType *menuType;
NSMutableArray *subMenuItems;
}
Run Code Online (Sandbox Code Playgroud)
但我不确定我需要在哪里放置枚举定义 - 如果我把它放在@interface之前它的语法不正确
Zed*_*nem 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;
}
Run Code Online (Sandbox Code Playgroud)
关于这个主题的一个很好的阅读:http://nshipster.com/ns_enum-ns_options/
您可能还希望符合Apple的枚举命名约定,并执行以下操作:
typedef NS_ENUM(NSInteger, MenuItemType) {
MenuItemTypeLinkInternal = 0,
MenuItemTypeLinkExternal = 1,
MenuItemTypeImage = 2,
MenuItemTypeMovie = 3,
MenuItemTypeMapQuery = 4
};
Run Code Online (Sandbox Code Playgroud)
希望这会有所帮助.
mou*_*iel 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;
}
Run Code Online (Sandbox Code Playgroud)
@mouviciel是对的,但我想我会告诉你,你想要的不是类属性,Objective-C不支持.类属性实际上是在类对象上设置的全局属性.你在想的是一个普通的属性(在类的实例上设置).
此外,您的代码显示的是您只是使用实例变量.可以通过添加accessor/mutator方法将实例变量转换为属性,如下所示:
// after @interface {}
@property (readwrite) enum menuItemType menuType;
Run Code Online (Sandbox Code Playgroud)
和
// under @implementation
@synthesize menuType;
Run Code Online (Sandbox Code Playgroud)
这是一个快捷方式:编译器将生成访问和更改menuType
属性的正确方法.我不确定这对你有多大帮助,但它会帮助你理解Objective-C语义.
归档时间: |
|
查看次数: |
9816 次 |
最近记录: |