Mos*_*she 11 enums objective-c
我正在研究几个iOS项目,我认为枚举数据类型对我有帮助.例如,我有一个游戏,玩家可以在几个方向走路.我可以只定义四个常量字符串值作为kDirectionUp,kDirectionDown等等.
我认为枚举类型在这里会更好.那是对的吗?如果是这样,我如何在这里定义一个枚举,以便我以后可以比较值?(如,if(someValue == kDirectionUp){})
csa*_*ano 13
这听起来是正确的事情.
使用C风格的类型定义在Objective-C中创建枚举非常简单.例如,在我的一个头文件中,我有以下类型定义:
typedef enum {
CFPosterViewTypePoster = 0,
CFPosterViewTypeStart, // 1
CFPosterViewTypeEnd, // 2
.... // 3
} CFPosterViewType;
Run Code Online (Sandbox Code Playgroud)
您定义CFPosterViewType的对象并将其设置为以下值之一:
CFPosterViewType posterType = CFPosterViewTypeStart;
Run Code Online (Sandbox Code Playgroud)
比较CFPosterViewType值时,它就像执行以下操作一样简单:
if (posterType == CFPosterViewTypePoster) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
请注意,上面枚举中注释掉的数字是隐含值.如果你想做一些不同的事情,比如说,定义一个位掩码,或者你需要的值与默认值不同的任何其他东西,你需要明确定义它们.
小智 5
在头文件中,定义一个enum类型,例如:
// SomeHeaderFile.h
typedef enum {
MOPlayerDirectionNone,
MOPlayerDirectionUp,
MOPlayerDirectionDown,
…
} MOPlayerDirection;
Run Code Online (Sandbox Code Playgroud)
每当您需要使用时MOPlayerDirection,#import该头文件.然后,您可以将其用作类型及其可能的值.
例如:
#import "SomeHeaderFile.h"
@interface MOPlayer : NSObject {
MOPlayerDirection currentDirection;
}
- (void)moveToDirection:(MOPlayerDirection)direction;
- (void)halt;
@end
Run Code Online (Sandbox Code Playgroud)
和:
#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
Run Code Online (Sandbox Code Playgroud)
如果枚举与类紧密相关,则通常在与类声明相同的头文件中定义它.在上面的示例MOPlayerDirection中,您可以在MOPlayer.h中定义它,而不是在SomeHeaderFile.h中定义.
| 归档时间: |
|
| 查看次数: |
2373 次 |
| 最近记录: |