현재 작업 중인 프로젝트는 상당 부분 Swift로 작성되어있고, 새로 작성하는 코드는 Swift로만 작성하고 있다. 그러다 Objective C로 구현된 부분을 건드려야할 일이 생겼다.
몇 가지 한정된 상태를 나타내고 관리하기 위해 enum을 선언하고 메서드를 추가하기로 했다.
Objective C에서 아래와 같이 새로운 enum 타입과 이를 인자로 받는 메서드를 선언했다고 가정하자.
typedef NS_ENUM(NSInteger, MyEnumType) {
MyEnumTypeFirst,
MyEnumTypeSecond
};
- (void)saveMyEnumType:(MyEnumType) mode {
...
}
(Apple은 NS_ENUM을 사용하는 것을 권장한다.)
이제 Swift 코드에서 가져다 쓰려는데 원소 이름이 자동완성에 나타나지 않았다. 그런데 자세히 보니 MyEnumType
부분이 생략되고 first
, second
만 나오고 있었다. 브릿지가 이 코드를 Swift로 넘겨줄 때 prefix를 자동으로 제거한 것이다.
때문에 아래와 같이 접근할 수 있다.
// value는 MyEnumType 타입
switch value {
case .first:
...
case .second:
...
}
그리고 접근 메서드는 이렇게 노출된다.
save(_ mode: MyEnumType)
그냥 save(value)
식으로 간결하게 사용할 수 있다.