【问题标题】:Build a list of constants variable from other constants从其他常量构建常量变量列表
【发布时间】:2012-04-20 18:17:42
【问题描述】:

我刚刚阅读了所有 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] 之类的东西也太冗长了。

有什么想法?

【问题讨论】:

    标签: iphone objective-c ios global-variables constants


    【解决方案1】:
    #define API_ROOT_URL @"https://www.example.org/api"
    NSString *const OAuthUrl = API_ROOT_URL @"/oauthToken";
    

    See also.

    【讨论】:

      【解决方案2】:

      我现在无法访问 MAC...你可以试试这个吗..

      在.h中

      NSString *baseURLString;
      extern NSString *const baseURL;
      

      在.m

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

      我不确定这是否可行..

      你在 SO 看到过这个答案吗……它有我所知道的所有方法……Constants in Objective-C

      【讨论】:

      • 不,由于我在问题中引用的相同原因,它不起作用。还是谢谢。
      【解决方案3】:

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

      #define baseURL @"http://example.org"
      #define mediaURL baseURL@"/media/"
      

      【讨论】:

      • 嗯,不错,先生。所以在这种情况下,我只需要一个 .h 文件,对吧?
      • 是的。定义只是预编译文字替换。 (不过,为了半标准,可以将它们重命名为 FC_BASE_URL 和 FC_MEDIA_URL 或类似的名称。)
      • @PhillipMills 你知道为什么 xcode 不自动建议我输入这些变量名称吗?
      • 对不起...如果您已导入包含定义的文件,则应该这样做。我确实创造了类似的东西并且有自动完成的工作。
      • @FredCollins 如果您在整个应用程序中都需要它,您可以在 Prefix.pch 文件中导入它。然后您不需要在每个文件中都导入它。
      猜你喜欢
      • 2015-06-15
      • 1970-01-01
      • 2021-10-21
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      相关资源
      最近更新 更多