1. ホーム
  2. objective-c

Objective-Cの#defineをSwiftから利用する方法

2023-10-19 15:52:57

質問

を移行しています。 UIViewController クラスを移行して、Swiftで少し練習しています。私はブリッジングヘッダを介して正常にObjective-Cコードを使用していますが、私は以下を含む定数ファイルをインポートする必要性があります。 #define ディレクティブを含む定数ファイルをインポートする必要があります。

で見たことがあります。 CocoaとObjective-CでSwiftを使う (シンプルなマクロ)に以下のようなものがあります。

シンプルなマクロ

通常 #define ディレクティブを使ってプリミティブ定数を定義していましたが、Swift では代わりにグローバル定数を使用します。例えば、定数定義 #define FADE_ANIMATION_DURATION 0.35 は、Swiftでよりよく表現することができます let FADE_ANIMATION_DURATION = 0.35 . 単純な定数のようなマクロはSwiftのグローバル変数に直接マッピングされるので、コンパイラは自動的にCとObjective-Cのソースファイルで定義された単純なマクロをインポートします。

ということで、可能なようです。私は、ブリッジングヘッダーに私の定数を含むファイルをインポートしましたが、私は私の .swift ファイルから、解決することができません。

Swiftから定数を見えるようにするにはどうしたらいいでしょうか?

UPDATEしてください。

で動作しているようです。 NSString 定数では動作しているようですが、ブーリアンでは動作していません。

#define kSTRING_CONSTANT @"a_string_constant" // resolved from swift
#define kBOOL_CONSTANT YES // unresolved from swift

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

現在、いくつかの #define は変換されるものとされないものがあります。具体的には

#define A 1

...になる。

var A: CInt { get }

または

#define B @"b"

...になる。

var B: String { get }

残念ながら YESNO はSwiftコンパイラによって認識され、その場で変換されることはありません。

を変換することをお勧めします。 #define を実際の定数に変換することをお勧めします。 #define よりも優れています。

.h:

extern NSString* const kSTRING_CONSTANT;
extern const BOOL kBOOL_CONSTANT;

.m

NSString* const kSTRING_CONSTANT = @"a_string_constant";
const BOOL kBOOL_CONSTANT = YES;

そして、Swiftが表示されます。

var kSTRING_CONSTANT: NSString!
var kBOOL_CONSTANT: ObjCBool

もう一つの方法は BOOL の定義を

#define kBOOL_CONSTANT 1

より速く。しかし、実際の定数ほどは良くない。