9

Ad という名前のクラスの .m ファイルには、3 つの静的文字列があります。

static NSString *AdStateDisabled = @"disable";
static NSString *AdStateExpired = @"expired";
static NSString *AdStateActive = @"active";

現在のクラスでこれらの静的変数を使用することはできますが、他のクラスから呼び出すことはできません。これらの静的変数をグローバルにする方法はありますか? たとえば、私のviewcontrollerクラスでは、次のようなことができます。

//HomeViewController.m
if ([self.ad.state isEqual:Ad.AdStateDisabled])
{
     //do something
}
4

2 に答える 2

18

次の宣言を HomeViewController.h ヘッダーに追加できます。これは、文字列にアクセスしたい場所にインポートする必要があります。

//HomeViewController.h
extern NSString *AdStateDisabled;
extern NSString *AdStateExpired;
extern NSString *AdStateActive;

次に、定義を変更して「静的」を削除します。

//HomeViewController.m
NSString *AdStateDisabled = @"disable";
NSString *AdStateExpired = @"expired";
NSString *AdStateActive = @"active";

文字列のユーザーが HomeViewController.h をインポートする必要がない場合は、AdState.h でこれらの文字列を定義し、その定義を AdState.m に配置 (および HomeViewController.m から削除) することもできます。文字列を使用するには、AdState.h をインポートするだけで済みます。

于 2010-10-19T04:36:09.277 に答える
10

まず、静電気を除去します。C および Objective-C の静的変数と関数は、現在のコンパイル ユニットにのみ表示されることを意味します (つまり、多かれ少なかれ、statix 変数を宣言したファイルのみが表示されます)。

次に、クラスに関連付けられたクラスの 1 つのように、「extern」を使用してパブリック ヘッダー ファイルで変数を宣言する必要もあります。

extern NSString *AdStateDisabled;

その後、それらを他のファイルでも使用できますが、「Ad.AdStateDisabled」としてアクセスするのではなく、「AdStateDisabled」としてアクセスします。

于 2010-10-19T04:44:21.910 に答える