Objective-C
iOS
Swift

Objective-C で enum を宣言し、Extension して Swiftから利用する

More than 1 year has passed since last update.

はじめに

プロジェクトが古い場合やSwiftへの書き換えが途中の場合、Objective-CとSwiftが混在していることがあります。
すでに存在するObjective-C側を少し変更して、Swift側から呼び出したいときに参考にしてください。

※ 私の場合は、Objective-CがEntity or Modelで、SwiftからそのEntityを使用するときに利用しました。

内容

実装方法

sample.h
typedef NS_ENUM(NSInteger, SampleEnum) {
    SampleEnumNormal = 0,
    SampleEnumFree = 1,
    SampleEnumPaid = 2
};
sample+extensions.swift
extension SampleEnum {
    var title: String {
        switch self {
        case .Normal:
            return "通常"
        case .Free:
            return "無料"
        case .Paid:
            return "有料"
        }
    }
}

※Swiftでは以下のように変換されるらしい(参考記事より)

sample.swift
enum SampleEnum: Int {
    case Normal
    case Free
    case Paid
}

Swiftからの利用方法

test.swift
SampleEnum(rawValue: 0)?.title

Objective-Cからの利用方法

なし
※通常のEnumとしては使えますが、SwiftでExstensionした中は呼び出せないと思います。ただ、ここはイマイチ理解できていないので、利用する方法があるかもしれません。知っている方はぜひ教えてください。

参考記事