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

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

在.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; } 

你的typedef需要在头文件(或者其他一些#import到你的头文件中),因为否则编译器将不知道什么大小使得PlayerState ivar。 除此之外,它看起来对我好。

苹果提供了一个macros来帮助提供更好的代码兼容性,包括Swift。 使用macros看起来像这样。

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

logging在这里

在.h:

 typedef enum { PlayerStateOff, PlayerStatePlaying, PlayerStatePaused } PlayerState; 

对于当前的项目,您可能需要使用NS_ENUM()NS_OPTIONS()macros。

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

这就是苹果如何为NSString这样的类做这件事:

在头文件中:

 enum { PlayerStateOff, PlayerStatePlaying, PlayerStatePaused }; typedef NSInteger PlayerState; 

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

我build议使用NS_OPTIONS或NS_ENUM。 你可以在这里阅读更多关于它的信息: http : //nshipster.com/ns_enum-ns_options/

这里是我自己的代码使用NS_OPTIONS的例子,我有一个实用工具,在UIView的图层上设置一个子图层(CALayer)来创build一个边框。

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