본문 바로가기
iOS/iOS

Swift 에서 선언된 enum을 Objc 코드에서 사용하기

by 헤콩 2023. 3. 13.
반응형

개발하다보니 Swift 에서 선언된 enum 타입을 objc 코드에서 사용해야할 일이 있었는데요.

objc 코드로 된 .m 파일과 .h 파일에서의 사용방법이 조금 다른 것 같아 게시글로 정리해두려 합니다.

 

무엇보다 objc 헤더 파일에서 swift 로 선언된 enum을 사용하는 방법은 검색해도 안나와서 결국 스스로 해결하지는 못했습니다..ㅎㅎ

 

그럼 빠르게 본론으로 들어가겠습니다.

 

 

objc .m 파일에서 Swift 로 선언된 enum 타입 사용하기

일단 아래 코드처럼 Swift 로 enum이 선언되어 있다고 가정합니다.

objc 파일에서 사용해야하니 @objc 키워드도 추가합니다.

@objc
enum FoodType: Int {
    case none
    case egg
    case milk
    case cake
}

 

 

그럼 .m 파일에서는 사실 간단하게 #import <(프로젝트 이름)-Swift.h> 을 추가해서 브릿징 헤더를 통해 Swift 로 선언된 FoodType을 사용할 수 있게됩니다.

브릿징 헤더에 대한 설명은 아래 게시물을 참고해주세요!

 

Objective-C 와 Swift 혼용 사용하기

iOS에서는 Objective-C와 Swift를 한 파일에서 혼용하여 사용할 수 있습니다. 따라서 기존 프로젝트가 어떤 언어로 구현되어 있는지는 우리에게 영향을 주지 않습니다. 이번 게시물에서는 Swift에서 Obj

beenii.tistory.com

 

 

 

 

objc .h 파일에서 Swift 로 선언된 enum 타입 사용하기

그럼 이제 검색으로도 찾기 힘든 objc 헤더에서 Swift 로 선언된 enum 타입을 사용하는 방법입니다!

근데 엄청 간단하더라구요.

 

objc 헤더 파일에 아래 코드를 추가하여 해당 enum 타입을 사용할 수 있습니다.

typedef NS_ENUM(NSInteger, FoodType);

 

근데 간혹 해당 enum 타입을 objc 헤더에 선언된 메서드에 사용했다가, 해당 메서드를 사용하는 다른 Swift 파일에서 해당 메서드를 찾을 수 없다는 오류가 발생하고는 하는데요.

 

아직까지 그 오류가 왜 발생하는지 이유를 찾지 못해서, 가끔 그런 오류가 발생할 때는 enum 타입 대신 rawValue (FoodType은 NSInteger) 를 넣어 사용하고는 합니다 😂

 

 

그래도 간단하죠?

 

 

 

반응형

댓글