Objective-C Language
열거 형
수색…
통사론
- typedef NS_ENUM (type, name) {...} - type 은 열거 유형이며 name 은 열거 형 이름 입니다. 값은 "..."입니다. 이것은 기본적인 열거 형과 그것과 함께 갈 유형을 생성합니다. Xcode와 같은 프로그램은 enum 형식의 변수에 enum 값 중 하나가 있다고 가정합니다.
열거 형 정의하기
열거 형은 위의 구문에 따라 정의됩니다.
typedef NS_ENUM(NSUInteger, MyEnum) {
MyEnumValueA,
MyEnumValueB,
MyEnumValueC,
};
열거 유형에 고유 한 원시 값을 설정할 수도 있습니다.
typedef NS_ENUM(NSUInteger, MyEnum) {
MyEnumValueA = 0,
MyEnumValueB = 5,
MyEnumValueC = 10,
};
첫 번째 값을 지정할 수도 있고 다음의 모든 값이 증가분과 함께 사용됩니다.
typedef NS_ENUM(NSUInteger, MyEnum) {
MyEnumValueA = 0,
MyEnumValueB,
MyEnumValueC,
};
이 열거 형의 변수는 MyEnum enumVar = MyEnumValueA
의해 생성 될 수 있습니다.
Objective-C에서 typedef enum 선언
enum은 정렬 된 값 집합을 선언합니다. typedef는이 이름에 편리한 이름을 추가합니다. 첫 번째 요소는 0입니다.
typedef enum {
Monday=1,
Tuesday,
Wednesday
} WORKDAYS;
WORKDAYS today = Monday;//value 1
C ++ std :: vector 변환하기 C 배열에 대한 설명
많은 C ++ 라이브러리는 열거 형을 사용하는 벡터를 사용하여 열거 형을 사용하고 데이터를 반환 / 수신합니다. C 열거 형은 Objective-C 객체가 아니기 때문에 Objective-C 모음을 C 열거 형과 직접 사용할 수 없습니다. 아래 예제는 배열에 대한 NSArray와 generics 및 래퍼 객체의 조합을 사용하여이를 처리합니다. 이 방법으로 컬렉션은 데이터 유형에 대해 명시적일 수 있으며 C 배열 Objective-C 객체가 사용되는 메모리 누수 가능성에 대해 걱정할 필요가 없습니다.
다음은 C enum과 Objective-C와 동일한 객체입니다.
typedef enum
{
Error0 = 0,
Error1 = 1,
Error2 = 2
} MyError;
@interface ErrorEnumObj : NSObject
@property (nonatomic) int intValue;
+ (instancetype) objWithEnum:(MyError) myError;
- (MyError) getEnumValue;
@end
@implementation ErrorEnumObj
+ (instancetype) objWithEnum:(MyError) error
{
ErrorEnumObj * obj = [ErrorEnumObj new];
obj.intValue = (int)error;
return obj;
}
- (MyError) getEnumValue
{
return (MyError)self.intValue;
}
@end
그리고 Objective-C ++에서이를 사용할 수 있습니다 (결과 NSArray는 C ++이 사용되지 않는 Objective-C 전용 파일에서 사용될 수 있습니다).
class ListenerImpl : public Listener
{
public:
ListenerImpl(Listener* listener) : _listener(listener) {}
void onError(std::vector<MyError> errors) override
{
NSMutableArray<ErrorEnumObj *> * array = [NSMutableArray<ErrorEnumObj *> new];
for (auto&& myError : errors)
{
[array addObject:[ErrorEnumObj objWithEnum:myError]];
}
[_listener onError:array];
}
private:
__weak Listener* _listener;
}
이러한 종류의 솔루션을 여러 열거 형에서 사용할 경우 EnumObj (선언 및 구현)를 매크로 (솔루션과 같은 템플릿을 만들 때)를 사용하여 만들 수 있습니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow