我正在开展几个iOS项目,我认为枚举数据类型对我有帮助。例如,我有一个游戏,玩家可以在几个方向走路。我可以用字符串值定义四个常量kDirectionUp
,kDirectionDown
等等。
我认为枚举类型在这里会更好。那是对的吗?如果是这样,我如何在这里定义一个枚举,以便我以后可以比较值? (如,if(someValue == kDirectionUp){}
)
答案 0 :(得分:13)
这听起来是正确的事情。
使用C风格的类型定义在Objective-C中创建枚举非常简单。例如,在我的一个头文件中,我有以下类型定义:
typedef enum {
CFPosterViewTypePoster = 0,
CFPosterViewTypeStart, // 1
CFPosterViewTypeEnd, // 2
.... // 3
} CFPosterViewType;
定义CFPosterViewType的对象并将其设置为以下值之一:
CFPosterViewType posterType = CFPosterViewTypeStart;
比较CFPosterViewType值时,它就像执行以下操作一样简单:
if (posterType == CFPosterViewTypePoster) {
// do something
}
请注意,上面枚举中注释掉的数字是隐含值。如果你想做一些不同的事情,比如说,定义一个位掩码,或者你需要的值与默认值不同,你需要明确定义它们。
答案 1 :(得分:5)
在头文件中,定义enum
类型,例如:
// SomeHeaderFile.h
typedef enum {
MOPlayerDirectionNone,
MOPlayerDirectionUp,
MOPlayerDirectionDown,
…
} MOPlayerDirection;
每当您需要使用MOPlayerDirection
,#import
该头文件时。然后,您可以将其用作类型及其可能的值。
例如:
#import "SomeHeaderFile.h"
@interface MOPlayer : NSObject {
MOPlayerDirection currentDirection;
}
- (void)moveToDirection:(MOPlayerDirection)direction;
- (void)halt;
@end
和
#import "SomeHeaderFile.h"
#import "MOPlayer.h"
@implementation MOPlayer
- (id)init {
self = [super init];
if (self) {
currentDirection = MOPlayerDirectionNone;
}
return self;
}
- (void)moveToDirection:(MOPlayerDirection)direction {
currentDirection = direction;
switch (currentDirection) {
case MOPlayerDirectionUp:
// do something
break;
case MOPlayerDirectionDown:
// do something
break;
}
}
- (void)halt {
if (currentDirection != MOPlayerDirectionNone) {
// do something
currentDirection = MOPlayerDirectionNone;
}
}
@end
如果枚举与类紧密相关,则通常在与类声明相同的头文件中定义它。在上面的示例中,您可以在MOPlayer.h中定义它,而不是在SomeHeaderFile.h中定义MOPlayerDirection
。
答案 2 :(得分:2)
只需在文件顶部定义它们:
enum // direction types
{
kDirectionUp = 0,
kDirectionDown, // 1
kDirectionLeft, // 2
kDirectionRight // 3
};
然后你可以按要求打电话:
if(someValue == kDirectionUp){ // do something }