21

クラスAIにはこれがあります:

static NSString * const kMyConstant = @"my constant string";

これをクラス B から参照するにはどうすればよいですか?

4

3 に答える 3

48

ヘッダーで文字列を拡張し、実装で文字列を定義する必要があります。

//ClassA.h
extern NSString * const kMyConstant;

//ClassA.m
NSString * const kMyConstant = @"my constant string";

//ClassB.h/m
#import "ClassA.h"

...
    NSLog(@"String Constant: %@", kMyConstant);
于 2012-08-13T21:23:21.800 に答える
14

これにリンクされているファイルにのみ表示staticされることを指定する--を削除する必要があります。kMyConstant

次に、クラスAのヘッダーで文字列を(定義するのではなく)宣言します。

extern NSString * const kMyConstant;

この文字列を使用する場所にそのヘッダーをインポートします。宣言は、ストレージが他の場所に作成された名前でextern存在することを示しています。NSString * constkMyConstant

静的定義がすでにヘッダーにある場合は、それを別の場所(通常は実装ファイル)に移動する必要があります。定義できるのは1回だけで、変数を定義するファイルをインポートしようとすると、リンカーエラーが発生します。

于 2012-08-13T21:21:50.317 に答える
4

静的な場合はできません (これが static キーワードの目的です)。

ただし、単純にグローバル変数として宣言する場合は、次のようにすることができます。

// ClassA.m

NSString *const str = @"Foo";

// ClassB.m

extern NSString *const str;

NSLog(@"str is: %@", str);
于 2012-08-13T21:22:34.543 に答える