반응형
objective-c Enum(enumeration :이름이 지정된 상수위 집합)의 데이터 구조를
swift에서도 사용하도록 하는데 많은 제약 사항이 발생 했다.
T1. objective-c Enum은 int로만 초기화가 가능하다.
즉 초기화를 하지 않으면 default로 int형으로 초기화 된다는 말이다.
typedef enum {
can, // 0
Timesale, // 1
Portal, // 2
}enumTest;
typedef enum {
can = 1, //1
Timesale = 2, //2
Portal = 3, //3
}enumTest;
Q1. 결정해야 한다. enum 구조를 string형으로 할지, int형으로 할지
// string 형식을 아래와 같이 사용하면 된다.
typedef NSString *const enumTest;
static enumTest
can = @"CAN",
Timesale = @"TIMESALE",
Portal = @"PORTAL";
나는 그냥 int형을 사용하기로 했다,
string형식이 거의 필요하지 않기도 했고
필요하면, 해당 메소드에 switch 문을
사용해서 변환하기로 했다.
T2. objective-c 사용하던 방식으로는 enum 형태는 swift에서
인식을 하지 못해 찾을수가 없다.
Q2. NS_ENUM 매크로를 사용한다.
추가적으로 swift에서 사용할 수 있는 이름을 재지정하는 NS_SWIFT_NAME 매크로도 있다.
typedef NS_ENUM(int, enumTest) {
can = 1,
Timesale = 2,
Portal = 3,
};
typedef NS_ENUM(int, enumTest) {
can = 1,
Timesale = 2,
Portal = 3,
}NS_SWIFT_NAME(swiftEnumTest);
https://developer.apple.com/documentation/swift/grouping-related-objective-c-constants
T3. 선언한 열거형에서 바로 체인형식으로 사용하면
타입 에러가 발생했다.
enumTest.can // int32 error 발생
enumTest.Timesale // int32 error 발생
enumTest.Portal // int32 error 발생
Q3. 별도의 변수를 선언후 enum을 타입으로 지정한후,
해당 값을 사용시 rawvalue로 선언해서 사용한다.
// swift 프로젝트 안에서
let swiftEnumTest: enumTest = .can
HCHyper.sharedInstance().sceneStart(ARScanScene.rawValue)
728x90
'모바일 APP > Swift' 카테고리의 다른 글
Objective c 네트워크 통신 (0) | 2023.05.25 |
---|---|
S3 쉘스크립트 만들기 (1) | 2023.04.05 |
Xcode 구조 (0) | 2021.05.31 |
IOS 개발 조건 (0) | 2021.05.31 |