현재 작업 중인 프로젝트는 상당 부분 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) 식으로 간결하게 사용할 수 있다.

kiwi campus

가족여행차 샌 프란시스코에 갔다가 오랜만에 버클리 교정을 구경하러 갔다.돌아다니다보니 Sather gate 근처의 분수대 주변에 이런 게 돌아다니고 있었다.처음엔 학생이 만든 장난감 정도로 생각했다. 폰에 외장(?)렌즈를 달아서 꽂아놨는데 이게 ...… Continue reading

Using enum from Objective C in Swift

Published on March 30, 2017

AAD(Associate Android Developer) 합격

Published on March 25, 2017