아래에 표시된 것처럼 구현 파일에 열거 형을 선언하고 내 인터페이스에서 해당 유형의 변수를 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;
}
답변
귀하의 typedef
요구 헤더 파일 (또는있어 다른 파일에 있어야합니다 #import
, 그렇지 않으면 컴파일러가 만드는 어떤 크기를 알 수 없기 때문에, 헤더에 에드) PlayerState
바르 있습니다. 그 외에는 괜찮아 보입니다.
답변
Apple은 Swift를 포함하여 더 나은 코드 호환성을 제공하는 데 도움이되는 매크로를 제공합니다. 매크로를 사용하면 다음과 같습니다.
typedef NS_ENUM(NSInteger, PlayerStateType) {
PlayerStateOff,
PlayerStatePlaying,
PlayerStatePaused
};
답변
.h에서 :
typedef enum {
PlayerStateOff,
PlayerStatePlaying,
PlayerStatePaused
} PlayerState;
답변
현재 프로젝트에서는 NS_ENUM()
또는 NS_OPTIONS()
매크로 를 사용할 수 있습니다 .
typedef NS_ENUM(NSUInteger, PlayerState) {
PLAYER_OFF,
PLAYER_PLAYING,
PLAYER_PAUSED
};
답변
다음은 NSString과 같은 클래스에서 Apple이 수행하는 방식입니다.
헤더 파일에서 :
enum {
PlayerStateOff,
PlayerStatePlaying,
PlayerStatePaused
};
typedef NSInteger PlayerState;
답변
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