Objective-C グローバル定数変数Q&Aをすべて読んだところですが、私の問題には不適切であることがわかりました。
次のような変数のリストが必要です。
NSString *baseURL = @"http://example.org";
NSString *mediaURL = @"http://example.org/media/";
NSString *loginURL = @"http://example.org/login/";
NSString *postURL = @"http://example.org/post/";
etc.
もちろん、このコードは非常に悪いアプローチなので使用できません。ベース URL を変更する必要がある場合は、すべての変数を変更する必要があります。アプリのすべてのクラスからこれらの変数にアクセスする必要があるため、このアプローチでそれらをグローバルとして宣言しました。
// 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]
必要なたびに何かを使用するのは冗長すぎると思います。
それについてのアイデア?