我剛剛閱讀了全部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]
的東西。
想法呢?
嗯,還不錯先生。所以在這種情況下,我只需要一個.h文件,對吧? – 2012-04-07 14:49:51
@FredCollins是.. – 2012-04-07 14:50:32
是的。這些定義只是預編譯字面替換。 (雖然,要達到半標準,可以將它們重命名爲FC_BASE_URL和FC_MEDIA_URL或其他類型。) – 2012-04-07 14:52:45