我正在开发一些iOS项目,认为枚举数据类型对我会很有帮助。例如,我有一个游戏,玩家可以向多个方向行走。我可以定义四个带字符串值的常量,如kDirectionUp
,kDirectionDown
等。
我认为在这里使用枚举类型会更好。这样做正确吗?如果是这样,我该如何定义一个枚举类型,以便我以后可以比较值?(例如,if(someValue == kDirectionUp){}
)
我正在开发一些iOS项目,认为枚举数据类型对我会很有帮助。例如,我有一个游戏,玩家可以向多个方向行走。我可以定义四个带字符串值的常量,如kDirectionUp
,kDirectionDown
等。
我认为在这里使用枚举类型会更好。这样做正确吗?如果是这样,我该如何定义一个枚举类型,以便我以后可以比较值?(例如,if(someValue == kDirectionUp){}
)
听起来是正确的做法。
使用 C 风格的类型定义可以很容易地在 Objective-C 中创建枚举。例如,在我的一个头文件中,我有以下类型定义:
typedef enum {
CFPosterViewTypePoster = 0,
CFPosterViewTypeStart, // 1
CFPosterViewTypeEnd, // 2
.... // 3
} CFPosterViewType;
您可以定义一个CFPosterViewType对象并将其设置为以下值之一:CFPosterViewType posterType = CFPosterViewTypeStart;
比较CFPosterViewType值就像这样简单:
if (posterType == CFPosterViewTypePoster) {
// do something
}
请注意上面枚举中被注释掉的数字是隐式值。如果你想要做一些不同的事情,比如定义一个位掩码或者其他任何需要与默认值不同的值的情况下,您需要显式地定义它们。
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
MOPlayerDirection
定义在MOPlayer.h中,而不是在SomeHeaderFile.h中。enum // direction types
{
kDirectionUp = 0,
kDirectionDown, // 1
kDirectionLeft, // 2
kDirectionRight // 3
};
if(someValue == kDirectionUp){ // do something }
MOPlayerDirection *currentDirection
应该改为MOPlayerDirection currentDirection
;-). 这里可能没有什么区别,但是较新的做法似乎是在枚举之后显式添加typedef NSUInteger MOPlayerDirection;
来帮助编译器进行处理。 - NSGodNSUInteger
如何帮助编译器。编译器可以自由选择enum
的底层数据类型,而该数据类型保证是整数数据类型之一。 - user557219