アップデート:
Swift 2/Xcode 7 以降では、次のような静的定数定義
static NSString* const kColor005C98 = @"005C98"; // in Constants.h file
Swiftにインポートされ、問題なく使用できます。
(Swift 1.x の古い回答)コードが
static NSString* const kColor005C98 = @"005C98"; // in Constants.h file
Objective-Cコンパイラによって処理される場合、2 つのものが 1 つのステートメントに結合されたものとして扱われます。
- 識別子を導入し、その型を記述する変数宣言、および
- この識別子を実際にインスタンス化/実装する変数定義。
たとえば
、定義と宣言の違いは何ですか?
宣言と定義の違いをよく説明しています。
Swift コンパイラは、ステートメントを宣言としてのみ扱います。したがって、変数はどこにも定義されていないため、リンカー エラーが発生します。
この問題を解決するには、定義を Objective-C ファイルに移動する必要があります。
// Constants.m:
#import "Constants.h"
NSString * const kColor005C98 = @"005C98";
宣言を次の宣言に変更しextern
ます。
// Constants.h:
extern NSString * const kColor005C98;
または、static
修飾子を削除することもできます。
NSString * const kColor005C98 = @"005C98";
Swiftで動作するようにします。欠点は、この行が複数の Objective-C ファイルに含まれている場合、それらすべてがグローバルに表示されるシンボルを定義し、kColor005C98
「重複シンボル」リンカー エラーが発生することです。
もう 1 つの方法は、代わりにマクロ定義を使用することです。
#define kColor005C98 @"005C98"