본문 바로가기
모바일 APP/Swift

Objective C Enum을 -> Swift에서 사용하기

by 살길바라냐 2023. 6. 26.
반응형

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

 

Grouping Related Objective-C Constants | Apple Developer Documentation

Add macros to your Objective-C types to group their values in Swift.

developer.apple.com

 

 

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