我在我的实现文件中声明了一个枚举,如下所示,并在我的接口中将该类型的变量声明为PlayerState thePlayerState;并在我的方法中使用了变量。但是我收到错误声明它是未声明的。如何在我的方法中正确声明和使用PlayerState类型的变量?:
在.m文件中
@implementation View1Controller
typedef enum playerStateTypes
{
PLAYER_OFF,
PLAYER_PLAYING,
PLAYER_PAUSED
} PlayerState;
<。>文件中的:
@interface View1Controller : UIViewController {
PlayerState thePlayerState;
<。>在.m文件中的某些方法:
-(void)doSomethin{
thePlayerState = PLAYER_OFF;
}
答案 0 :(得分:204)
Apple提供了一个宏来帮助提供更好的代码兼容性,包括Swift。使用宏看起来像这样。
typedef NS_ENUM(NSInteger, PlayerStateType) {
PlayerStateOff,
PlayerStatePlaying,
PlayerStatePaused
};
答案 1 :(得分:108)
您的typedef
需要位于头文件中(或者#import
添加到您的标头中的其他文件),否则编译器将无法知道{{1}的大小伊娃。除此之外,它看起来还不错。
答案 2 :(得分:27)
在.h:
typedef enum {
PlayerStateOff,
PlayerStatePlaying,
PlayerStatePaused
} PlayerState;
答案 3 :(得分:19)
使用当前项目,您可能需要使用NS_ENUM()
或NS_OPTIONS()
宏。
typedef NS_ENUM(NSUInteger, PlayerState) {
PLAYER_OFF,
PLAYER_PLAYING,
PLAYER_PAUSED
};
答案 4 :(得分:16)
这就是Apple为NSString这样的课程所做的事情:
在头文件中:
enum {
PlayerStateOff,
PlayerStatePlaying,
PlayerStatePaused
};
typedef NSInteger PlayerState;
上的编码指南
答案 5 :(得分:6)
我建议使用NS_OPTIONS或NS_ENUM。您可以在此处详细了解:http://nshipster.com/ns_enum-ns_options/
以下是我自己的代码中使用NS_OPTIONS的示例,我有一个实用程序,可以在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