如何在 Objective-C 中定义和使用 ENUM?

我在实现文件中声明了一个枚举,如下所示,并在接口中声明了一个类型为 PlayerState thePlayerState 的变量; 并在方法中使用了该变量。但是我得到错误说明它是未声明的。如何在方法中正确声明和使用 PlayerState 类型的变量?:

在.m 文件中

@implementation View1Controller


typedef enum playerStateTypes
{
PLAYER_OFF,
PLAYER_PLAYING,
PLAYER_PAUSED
} PlayerState;

在.h 文件中:

@interface View1Controller : UIViewController {


PlayerState thePlayerState;

在.m 文件中的某个方法中:

-(void)doSomethin{


thePlayerState = PLAYER_OFF;


}
177226 次浏览

您的 typedef需要在头文件中(或者在头文件中包含 #import的其他文件) ,因为否则编译器将不知道使 PlayerState变量的大小。除此之外,我觉得没什么问题。

这就是苹果对于类似 NSString 的类的处理方式:

在头文件中:

enum {
PlayerStateOff,
PlayerStatePlaying,
PlayerStatePaused
};


typedef NSInteger PlayerState;

请参阅 http://developer.apple.com/的编码指南

在. h:

typedef enum {
PlayerStateOff,
PlayerStatePlaying,
PlayerStatePaused
} PlayerState;

Apple 提供了一个宏来帮助提供更好的代码兼容性,包括 Swift。

typedef NS_ENUM(NSInteger, PlayerStateType) {
PlayerStateOff,
PlayerStatePlaying,
PlayerStatePaused
};

这里有记录

对于当前的项目,您可能希望使用 NS_ENUM()NS_OPTIONS()宏。

typedef NS_ENUM(NSUInteger, PlayerState) {
PLAYER_OFF,
PLAYER_PLAYING,
PLAYER_PAUSED
};

我建议使用 NS _ OPTION 或 NS _ ENUM

下面是我自己的代码中使用 NS _ OPTION 的一个例子,我有一个实用程序,它在 UIView 的层上设置一个子层(CALayer)来创建一个边框。

H 档案:

typedef NS_OPTIONS(NSUInteger, BSTCMBorder) {
BSTCMBOrderNoBorder     = 0,
BSTCMBorderTop          = 1 << 0,
BSTCMBorderRight        = 1 << 1,
BSTCMBorderBottom       = 1 << 2,
BSTCMBOrderLeft         = 1 << 3
};


@interface BSTCMBorderUtility : NSObject


+ (void)setBorderOnView:(UIView *)view
border:(BSTCMBorder)border
width:(CGFloat)width
color:(UIColor *)color;


@end

M 文件:

@implementation BSTCMBorderUtility


+ (void)setBorderOnView:(UIView *)view
border:(BSTCMBorder)border
width:(CGFloat)width
color:(UIColor *)color
{


// Make a left border on the view
if (border & BSTCMBOrderLeft) {


}


// Make a right border on the view
if (border & BSTCMBorderRight) {


}


// Etc


}


@end