5

我刚刚阅读了所有objective-c 全局常量变量问答,但我发现它们不适合我的问题。

我需要一个这样的变量列表:

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]每次我需要它时使用类似的东西也太冗长了。

关于它的想法?

4

3 回答 3

4

我知道它是老式的,但我只是使用预处理器宏并让常量字符串连接处理它。

#define baseURL @"http://example.org"
#define mediaURL baseURL@"/media/"
于 2012-04-07T14:23:45.967 回答
2
#define API_ROOT_URL @"https://www.example.org/api"
NSString *const OAuthUrl = API_ROOT_URL @"/oauthToken";

也可以看看。

于 2013-08-18T14:12:44.787 回答
0

我现在无法访问 MAC……你能试试这个吗……

在.h

NSString *baseURLString;
extern NSString *const baseURL;

baseURLString= @"http://example.org";
NSString *const baseURL= [NSString stringWithFormat:"%@", baseURL];

我不确定这会奏效..

而且您是否在 SO 看到过这个答案...它具有我所知道的所有方法... Objective-C 中的常量

于 2012-04-07T14:50:06.337 回答