Objective-C의 typedef 열거란 무엇입니까?
는 근본적으로 '무엇을'이 인지 것 같다.enum
언제 사용할 것인가 입니다.
예를 들어 다음과 같습니다.
typedef enum {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
여기서 실제로 선언되고 있는 것은 무엇입니까?
선언되는 됩니다.즉, 3가지입니다.익명으로 열거된 타입이유형,이유형,이유형입니다.ShapeType
는 그 익명 , 세 이름 "typedef" "typedef" "typypedef"는 "typedef"입니다.이 세 가지 이름은kCircle
,kRectangle
, , , , 입니다.kOblateSpheroid
이치노
그것을 분해해 봅시다.가장 간단한 경우 열거는 다음과 같이 선언할 수 있습니다.
enum tagname { ... };
가 "" "" ""로 열거가 됩니다.tagname
C 및 Objective-C(단, C++는 제외)에서는 이에 대한 모든 참조가 앞에 와야 합니다.enum
키워드를 지정합니다.예를 들어 다음과 같습니다.
enum tagname x; // declare x of type 'enum tagname'
tagname x; // ERROR in C/Objective-C, OK in C++
를 사용하지 않도록 위해, 「 」를 할 .enum
typedef
enum tagname { ... };
typedef enum tagname tagname; // declare 'tagname' as a typedef for 'enum tagname'
이는 한 줄로 요약할 수 있습니다.
typedef enum tagname { ... } tagname; // declare both 'enum tagname' and 'tagname'
쓸 , 사용할 수 , 쓸 수 없다, 쓸 수 없다.enum tagname
enum
하면, 「」를 설정할 수 .enum
및 이름으로만 합니다.
typedef enum { ... } tagname;
그럼 에는 '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 이렇게 을 합니다ShapeType
typedef'라고 합니다. ShapeType
에 기재되어 값 중 하는 변수( 어느 의 값)를해야 합니다.kCircle
,kRectangle
, , , , 입니다.kOblateSpheroid
)을할 수 ShapeType
단, 캐스팅을 통해 다른 값을 변경하므로 열거값을 읽을 때 주의해야 합니다.
ㅇㅇㅇㅇㅇ.kCircle
,kRectangle
, , , , 입니다.kOblateSpheroid
글로벌 네임스페이스에서 정수로서 선언됩니다. 않기 0으로 으로 시작합니다.kCircle
0이 되다.kRectangle
과 1로 하다.kOblateSpheroid
2면 .
Xcode 4.4부터 다음과 같이 Enum을 정의할 것을 권장합니다.
typedef enum ShapeType : NSUInteger {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
합니다.NS_ENUM
:
typedef NS_ENUM(NSUInteger, ShapeType) {
kCircle,
kRectangle,
kOblateSpheroid
};
이러한 정의는 보다 강력한 유형 검사 및 코드 완성도를 제공합니다. 수 .NS_ENUM
WWDC 2012 세션의 "Modern Objective-C" 비디오는 여기서 보실 수 있습니다.
공식 문서에 대한 링크는 여기를 클릭하십시오.
열거형은 일련의 정렬된 값을 선언합니다. typedef는 여기에 편리한 이름을 추가합니다.첫 번째 요소는 0 등입니다.
typedef enum {
Monday=1,
...
} WORKDAYS;
WORKDAYS today = Monday;
위의 내용은 shapeType 태그를 나열한 것입니다.
으로, 값이 음음음 values음 values a a of of a 。kCircle
,kRectangle
, 「」kOblateSpheroid
됩니다. ,, cir(kCircle) 내 、 cir 、 cir 、 kclekk 。것이 int i = kCircle;
유효합니다(예:
64비트 변경 업데이트:애플 문서에 따르면 64비트 변경에 대해
Enumerations Are Are Are Are Type : LLVM 컴파일러에서는 열거형 크기를 정의할 수 있습니다.즉, 일부 열거된 유형의 크기가 예상보다 클 수도 있습니다.해결책은 다른 모든 경우와 마찬가지로 데이터 유형의 크기에 대해 어떠한 가정도 하지 않는 것입니다.대신 열거된 값을 적절한 데이터 유형을 가진 변수에 할당하십시오.
따라서 64비트를 지원하는 경우 다음과 같은 구문을 사용하여 열거형을 생성해야 합니다.
typedef NS_ENUM(NSUInteger, ShapeType) {
kCircle,
kRectangle,
kOblateSpheroid
};
또는
typedef enum ShapeType : NSUInteger {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
않으면 .Implicit conversion loses integer precision: NSUInteger (aka 'unsigned long') to ShapeType
신속한 프로그래밍을 위한 업데이트:
빠르게, 구문 변경이 있습니다.
enum ControlButtonID: NSUInteger {
case kCircle , kRectangle, kOblateSpheroid
}
enum(Enumeration의 약자)은 일련의 값(enumerator)을 열거하는 데 사용됩니다.값은 기호(단어)로 표현되는 추상적인 것이다.예를 들어 기본 열거형은 다음과 같습니다.
enum { xs,s,m,l,xl,xxl,xxxl,xxxxl };
이 열거형에는 이름을 지정할 기호가 없기 때문에 익명이라고 합니다.하지만 그것은 여전히 완벽하게 옳다.그냥 이렇게 쓰세요.
enum { xs,s,m,l,xl,xxl,xxxl,xxxxl } myGrandMotherDressSize;
좋아, 인생은 아름답고 모든 게 잘 되고 있어.그러나 어느 날 이 열거형을 재사용하여 myGrandPantSize를 저장할 새 변수를 정의해야 합니다.그러면 다음과 같이 입력합니다.
enum { xs,s,m,l,xl,xxl,xxxl,xxxxl } myGrandMotherDressSize;
enum { xs,s,m,l,xl,xxl,xxxl,xxxxl } myGrandFatherPantSize;
그러나 컴파일러 오류 "다시 정의"가 발생합니다.실제로 컴파일러는 당신이 첫 번째 열거형인지 두 번째 열거형인지 확신할 수 없다는 것이 문제입니다.
같은 열거자 세트를 재사용하는 경우(여기서 xs...)xxxxl)는 여러 곳에서 고유한 이름으로 태그를 붙여야 합니다.이 세트를 두 번째로 사용할 때는 태그만 사용하면 됩니다.그러나 이 태그는 열거형 단어를 대체하는 것이 아니라 열거형 집합임을 잊지 마십시오.그런 다음 enum을 평소처럼 사용하도록 주의하십시오.다음과 같이 합니다.
// Here the first use of my enum
enum sizes { xs,s,m,l,xl,xxl,xxxl,xxxxl } myGrandMotherDressSize;
// here the second use of my enum. It works now!
enum sizes myGrandFatherPantSize;
파라미터 정의에서도 사용할 수 있습니다.
// Observe that here, I still use the enum
- (void) buyANewDressToMyGrandMother:(enum sizes)theSize;
enum을 어디에나 다시 쓰는 것은 편리하지 않고 코드를 이상하게 보이게 한다고 할 수 있습니다.맞아요.진짜 타입이 좋을 것 같아요.
이것이 정상으로 가는 우리의 위대한 진보의 마지막 단계이다.typedef를 추가하는 것만으로 열거형을 실제 형식으로 변환합니다.아, 마지막으로, typedef는 당신의 수업에서 허용되지 않습니다.그런 다음 바로 위에 유형을 정의하십시오.다음과 같이 합니다.
// enum definition
enum sizes { xs,s,m,l,xl,xxl,xxxl,xxxxl };
typedef enum sizes size_type
@interface myClass {
...
size_type myGrandMotherDressSize, myGrandFatherPantSize;
...
}
태그는 옵션입니다.그런 다음 여기서는 열거자에 태그를 붙이지 않고 새로운 유형을 정의합니다.그럼 더 이상 필요없겠네요
// enum definition
typedef enum { xs,s,m,l,xl,xxl,xxxl,xxxxl } size_type;
@interface myClass : NSObject {
...
size_type myGrandMotherDressSize, myGrandFatherPantSize;
...
}
@end
XCode를 사용하여 Objective-C를 개발하는 경우 NS_ENUM이 부가된 멋진 매크로를 발견할 수 있습니다.이를 통해 양호한 Enum을 쉽게 정의할 수 있을 뿐만 아니라 정적 분석기가 컴파일하기 전에 흥미로운 검사를 수행할 수 있습니다.
좋은 열거형!
typedef
는 기존 변수 유형의 이름을 재정의할 때 유용합니다.데이터 타입을 호출하는 간단하고 의미 있는 방법을 제공합니다.예:
typedef unsigned long int TWOWORDS;
여기서 type unsigned long int는 type TWOWORDS로 재정의되어 있습니다.따라서 unsigned long int의 변수를 서면으로 선언할 수 있습니다.
TWOWORDS var1, var2;
대신
unsigned long int var1, var2;
typedef enum {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
다음과 같이 사용할 수 있습니다.
ShapeType shape;
그리고.
enum {
kCircle,
kRectangle,
kOblateSpheroid
}
ShapeType;
다음과 같이 사용할 수 있습니다.
enum ShapeType shape;
enum은 구조에서 수행할 수 없는 열거 요소에 값을 할당하기 위해 사용됩니다.따라서 항상 완전한 변수에 액세스하는 대신 열거형 변수에 할당한 값에 따라 이 작업을 수행할 수 있습니다.기본적으로는 0 할당으로 시작하지만 임의의 값을 할당할 수 있으며 열거형 다음 변수에는 이전 값 +1이 할당됩니다.
0부터 시작하는 Raw default value는 다음과 같은 형식으로 사용할 수 있습니다.
- kCircle은 0입니다.
- k직각은 1입니다.
- kOblateSperoid는 2입니다.
고유한 시작 값을 할당할 수 있습니다.
typedef enum : NSUInteger {
kCircle, // for your value; kCircle = 5, ...
kRectangle,
kOblateSpheroid
} ShapeType;
ShapeType circleShape = kCircle;
NSLog(@"%lu", (unsigned long) circleShape); // prints: 0
typedef를 사용하면 프로그래머는 하나의 Objective-C 유형을 다른 유형으로 정의할 수 있습니다.예를들면,
typedef int Counter. int 유형과 동등한 Counter 유형을 정의합니다.이것에 의해, 코드의 가독성이 큰폭으로 향상됩니다.
Typedef는 C 및 C++ 키워드입니다.기본 데이터 유형(char, int, float, double, structure & enum)의 새 이름을 작성하기 위해 사용됩니다.
typedef enum {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
여기에 열거된 데이터형 ShapeType이 생성됩니다.다음과 같이 열거형 ShapeType의 새로운 이름을 쓸 수 있습니다.
ShapeType shape1;
ShapeType shape2;
ShapeType shape3;
enum은 많은 유형의 "disclosed"를 줄이고 코드를 보다 관리하기 쉽게 만들 수 있습니다.
#define STATE_GOOD 0
#define STATE_BAD 1
#define STATE_OTHER 2
int STATE = STATE_OTHER
이 정의에는 제약 조건이 없습니다.그냥 대체품일 뿐이야그것은 국가의 모든 조건을 제한할 수 없다.STATE가 5에 할당되면 일치하는 상태가 없기 때문에 프로그램이 잘못됩니다.그러나 컴파일러는 STATE = 5에 경고하지 않습니다.
그래서 이렇게 쓰는 게 좋아요.
typedef enum SampleState {
SampleStateGood = 0,
SampleStateBad,
SampleStateOther
} SampleState;
SampleState state = SampleStateGood;
언급URL : https://stackoverflow.com/questions/707512/what-is-a-typedef-enum-in-objective-c
'itsource' 카테고리의 다른 글
WPF C# 패스: 패스 데이터가 있는 문자열에서 코드(XAML 이외)로 지오메트리로 이동하는 방법 (0) | 2023.04.22 |
---|---|
파란색 서비스 버스 대기열을 한 번에 지웁니다. (0) | 2023.04.22 |
신호로 인해 명령이 실패했습니다.세그멘테이션 장애: 11 (0) | 2023.04.17 |
테이블이 존재하는지 확인하고 존재하지 않는 경우 SQL Server 2008에서 생성합니다. (0) | 2023.04.17 |
Windows에서 260자 경로 길이 제한이 있는 이유는 무엇입니까? (0) | 2023.04.17 |