1. ホーム
  2. objective-c

[解決済み] Objective-CでSwift構造体を使用する方法

2022-11-02 09:47:22

質問

以下のようなアプリケーション定数を格納する構造体を持っています。

struct Constant {

    static let ParseApplicationId = "xxx"
    static let ParseClientKey = "xxx"

    static var AppGreenColor: UIColor {
        return UIColor(hexString: "67B632")
    }
}

これらの定数は、Swift のコード内で Constant.ParseClientKey などで使用できます。しかし、私のコードでは、いくつかのObjective-Cクラスも含まれています。だから私の質問は、Objective-Cのコードでこれらの定数を使用する方法ですか?

定数を宣言するこの方法が良くない場合、SwiftとObjective-Cの両方のコードで使用されるグローバル定数を作成するための最良の方法は何でしょうか?

どのように解決するのですか?

悲しいことに、あなたは struct やグローバル変数を Objective-C に公開することはできません。 のドキュメントを参照してください。 を参照してください。

Objective-Cの相互運用性が必要な場合はクラスを使用する

データを処理する必要のある Objective-C API を使用する場合、または Objective-C フレームワークで定義された既存のクラス階層にデータモデルを合わせる必要がある場合、データのモデル化にクラスとクラス継承を使用する必要があるかもしれません。例えば、多くのObjective-Cフレームワークでは、サブクラス化することが期待されているクラスを公開しています。

今のところ、IMHOでは、最良の方法は次のようなものです。

let ParseApplicationId = "xxx"
let ParseClientKey = "xxx"
let AppGreenColor = UIColor(red: 0.2, green: 0.7, blue: 0.3 alpha: 1.0)

@objc class Constant: NSObject {
    private init() {}

    class func parseApplicationId() -> String { return ParseApplicationId }
    class func parseClientKey() -> String { return ParseClientKey }
    class func appGreenColor() -> UIColor { return AppGreenColor }
}

Objective-Cでは、このように使うことができます。

NSString *appklicationId = [Constant parseApplicationId];
NSString *clientKey = [Constant parseClientKey];
UIColor *greenColor = [Constant appGreenColor];