수색…


통사론

  • 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