我刚刚阅读了所有 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,我必须更改所有变量。 因为我需要从app的每个类访问这些变量,所以我用这种方法将它们声明为全局:
// 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]
的东西。
关于它的想法?
答案 0 :(得分:4)
我知道它是老式的,但我只是使用预处理器宏,让常量字符串连接处理它。
#define baseURL @"http://example.org"
#define mediaURL baseURL@"/media/"
答案 1 :(得分:2)
#define API_ROOT_URL @"https://www.example.org/api"
NSString *const OAuthUrl = API_ROOT_URL @"/oauthToken";
答案 2 :(得分:0)
我现在无法访问MAC ...你可以试试这个......
in .h
NSString *baseURLString;
extern NSString *const baseURL;
in .m
baseURLString= @"http://example.org";
NSString *const baseURL= [NSString stringWithFormat:"%@", baseURL];
我不确定这会起作用..
你也看到了这个答案......它有我所知道的所有方法...... Constants in Objective-C