52가지 유효한 방법(5) - 상태, 옵션, 상태 코드를 매거로 표시
열거(enum)
NSENUM 및 NSOPTIONS 매크로는 열거 유형을 정의하고 기본 데이터 유형을 나타냅니다.
NS_ENUM
NS_ENUM
기본값 /* NS_ENUM supports the use of one or two arguments. The first argument is always the integer type used for the values of the enum. The second argument is an optional type name for the macro. When specifying a type name, you must precede the macro with 'typedef' like so:
typedef NS_ENUM(NSInteger, NSComparisonResult) {
...
};
If you do not specify a type name, do not use 'typedef'. For example:
NS_ENUM(NSInteger) {
...
};
*/
#define NS_ENUM(...) CF_ENUM(__VA_ARGS__)
NS_OPTIONS
NS_OPTIONS
일반적으로 위치 이동 관련 조작을 정의하는 매거값 #define NS_OPTIONS(_type, _name) CF_OPTIONS(_type, _name)
열거(Enum) 및 상태(states)
어떤 대상이 겪는 여러 가지 상태를 하나의 매거 집합으로 정의할 수 있습니다 (enumeration set)
typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {
UIViewAnimationTransitionNone,
UIViewAnimationTransitionFlipFromLeft,
UIViewAnimationTransitionFlipFromRight,
UIViewAnimationTransitionCurlUp,
UIViewAnimationTransitionCurlDown,
};
0
부터 순서대로 1
을 추가한다.0~255
개 총 256
개(2^8
)의 매개 변수를 나타낼 수 있다.매거(enum)와 옵션(options)
옵션을 정의할 때 매거 형식을 사용해야 합니다.이 옵션들이 서로 조합될 수 있다면 더욱 그렇다.매거 정의가 맞기만 하면, 각 옵션 사이에는 '비트나 조작부호' 를 통해 조합할 수 있다.
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,
UIViewAutoresizingFlexibleWidth = 1 << 1,
UIViewAutoresizingFlexibleRightMargin = 1 << 2,
UIViewAutoresizingFlexibleTopMargin = 1 << 3,
UIViewAutoresizingFlexibleHeight = 1 << 4,
UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
UIViewAutoresizingNone 0 0 0 0 0 0 0 0
UIViewAutoresizingFlexibleLeftMargin 0 0 0 0 0 0 0 1
UIViewAutoresizingFlexibleWidth 0 0 0 0 0 0 1 0
UIViewAutoresizingFlexibleRightMargin 0 0 0 0 0 1 0 0
UIViewAutoresizingFlexibleTopMargin 0 0 0 0 1 0 0 0
UIViewAutoresizingFlexibleHeight 0 0 0 1 0 0 0 0
UIViewAutoresizingFlexibleBottomMargin 0 0 1 0 0 0 0 0
UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight
0 0 0 1 0 0 1 0
0
)2
3<<2
이후 결과는 12
3
의 2진법 11
으로 왼쪽으로 두 자리를 옮긴 후 오른쪽에 2개의 0
을 추가하면 1100
이다.1100
에서 10
진법으로 12
으로 전환했다.2
의 2
차방 ×3
에 해당한다.왼쪽으로 1
번 이동할 때마다 1
n>>2
에서 정형값 기호 오른쪽으로 2
비트)0
, 음수는 1
, 오른쪽은 버린다.2
으로 나눈 다음 9>>1
이후 4
9
의 2진법은 1001
이고 오른쪽으로 1
자리를 옮긴 후 왼쪽 정수는 0
을 보충하고 오른쪽으로 버린다.결과는 0100
이었다.10
진법으로 전환한 후 4
으로 변경됩니다.매거(enum)와 상태 코드(codes)
매거용법도
switch
문장에 사용할 수 있다.매거 유형을 처리하는 switch
문장에서 default
지점을 실현하지 마라.typedef NS_ENUM(NSUInteger, EOCConnectionState) {
EOCConnectionStateDisconnected,
EOCConnectionStateConnecting,
EOCConnectionStateConnected
};
switch (_currentState) {
EOCConnectionStateDisconnected:
//...
break;
EOCConnectionStateConnecting:
//...
break;
EOCConnectionStateConnected:
//...
break;
}
요점
NS_ENUM
과 NS_OPTIONS
매크로로 매거 유형을 정의하고 그 밑바닥 데이터 유형을 가리킨다.이렇게 하면 매거진이 개발자가 선택한 하위 데이터 형식으로 이루어지고 컴파일러가 선택한 형식을 사용하지 않는다는 것을 확보할 수 있다.switch
문장에서 default
지점을 실현하지 못한다.이렇게 하면 새로운 매거진을 추가하면 컴파일러는 개발자에게 switch
문장이 모든 매거진을 처리하지 않았다고 알린다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.