tomoyaonishiのブログ

iOSのことを中心に・・・その他もあるよ!

SwiftからObjective-Cのenumを扱う時の注意事項2

注意事項というかObjective-CenumSwiftはどう解釈するかのメモ

ObjC側でのenum

typedef enum : NSUInteger {
    MyEnumValueA,
    MyEnumValueB,
    MyEnumValueC,
} MyEnumValue;

があったとする。この定数をSwift側からさわろうとするとほとんどの場合でエラーになります。

SwiftはNS_ENUMあるいはNS_OPTIONSで定義されたCスタイルのenumのみを自動でSwiftでのenumに変換します。

NS_ENUM, NS_OPTIONSでenumを定義するように変更する。

NS_ENUM (NSUInteger, MyEnumValue) {
    MyEnumValueA,
    MyEnumValueB,
    MyEnumValueC,
};

そうするとSwift側で

enum MyEnumValue: Int {
    case A
    case B
    case C
}

という形で自動で読み込んでくれます。後はSwiftでのenumと同じ挙動になります。 ビット演算でのenumにはNS_OPTIONSを使ってください。

参考 Using Swift with Cocoa and Objective-C: Interacting with C APIs