如何在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;
我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