objective-cグローバル定数変数 Q & Aを読んだだけですが、私の問題には不適切だと分かりました。他の定数から変数の定数リストを作成する
私はこのような変数のリストが必要です。それは非常に悪いアプローチだと私はベースURLを変更する必要がある場合、私はすべての変数を変更しなければならないので、私はこのコードを使用することはできません。もちろん、
NSString *baseURL = @"http://example.org";
NSString *mediaURL = @"http://example.org/media/";
NSString *loginURL = @"http://example.org/login/";
NSString *postURL = @"http://example.org/post/";
etc.
を。
// Constants.h
extern NSString *const baseURL;
extern NSString *const mediaURL;
extern NSString *const loginURL;
extern NSString *const postURL;
// Constants.m
NSString *const baseURL = @"http://example.org";
NSString *const mediaURL = [NSString stringWithFormat:"%@%@", baseURL, @"/media/"];
NSString *const loginURL = [NSString stringWithFormat:"%@%@", baseURL, @"/login/"];
NSString *const postURL = [NSString stringWithFormat:"%@%@", baseURL, @"/post/"];
しかし私は私ので、これを行うことはできません:私は、これらの変数は、私はこのアプローチにはグローバルとしてそれらを宣言したアプリのすべてのクラスからアクセスする必要があるので このエラーが発生する:
Initializer element is not a compile-time constant
これは、オブジェクトが実行時に機能するためです。
私の質問は、ネットワークアプリでこのかなり普通のシナリオを処理するうえで、何がいいと思いますか?
私は、定数変数を扱うためにクラス(またはシングルトンクラス)を使うのはちょっと残念だと思っています。また、私が必要とする度に[MyClass globalVar]
のようなものをあまりにも冗長に使っています。
アイデアについては?
オム、悪くない先生を知っているすべてのアプローチがあります。ですから、この場合は1つの.hファイルしか必要ありません。 –
@FredCollinsはい.. –
はい。定義は、リテラルの置換をプレコンパイルするだけです。 (ただし、準標準であるため、名前をFC_BASE_URLやFC_MEDIA_URLなどの名前に変更することがあります) –