【问题标题】:Objective-C: how to group a series of string constants?Objective-C:如何对一系列字符串常量进行分组?
【发布时间】:2012-05-05 23:21:05
【问题描述】:

我以宏的方式定义了一系列字符串常量,如下所示,

#define EXT_RESULT_APPID  @"appid"
#define EXT_RESULT_ERROR_CODE  @"errorcode"
#define EXT_RESULT_PROGRESS  @"progress"
...

所有这些常量都应该在同一个上下文中使用,所以我想将它们限制在同一个命名空间中,我不想让它们成为全局,就像这样post 说。

另一方面,我可以将所有数字常量放在一个枚举中,但它不适用于字符串。 那我该如何对这些相关的字符串常量进行分组呢?

【问题讨论】:

    标签: objective-c ios nsstring


    【解决方案1】:

    创建一个头文件说Constants.h

    在此文件中添加所有常量。这些可以是您希望在项目的不同类中使用的常量。

    #define EXT_RESULT_APPID  @"appid"
    #define EXT_RESULT_ERROR_CODE  @"errorcode"
    #define EXT_RESULT_PROGRESS  @"progress"
    

    现在,不是在每个类中都导入这个 Constants.h,而是转到 <project name>-Prefix.pch 文件并在此处导入该文件。

    #import "SCConstants.h"
    

    现在您可以轻松地在项目的任何类中使用常量。

    【讨论】:

      【解决方案2】:

      这是一种方法:

      MONExtResult.h

      // add __unsafe_unretained if compiling for ARC
      struct MONExtResultStruct {
          NSString * const AppID;
          NSString * const ErrorCode;
          NSString * const Progress;
      };
      
      extern const struct MONExtResultStruct MONExtResult;
      

      MONExtResult.m

      const struct MONExtResultStruct MONExtResult = {
          .AppID = @"appid",
          .ErrorCode = @"errorcode",
          .Progress = @"progress"
      };
      

      使用中:

      NSString * str = MONExtResult.AppID;
      

      【讨论】:

      • 这个解决方案是否正确,不会导致任何内存泄漏?将始终保留这些字符串/不为零?
      • @user969153 like static NSString* const SomeConstant = @"SomeConstant";,字符串是不朽的。
      • 如果您只想在单个类/m 文件中使用 struct/strings 是否可以这样做而无需单独声明变量并定义它们的值? (为了节省打字样板)
      【解决方案3】:

      您可以创建一个名为“Constants.h”的头文件。然后你需要在你想使用这些常量的地方导入这个头文件:

      #import "Constants.h"
      

      【讨论】:

        【解决方案4】:

        创建一个头文件,在其中声明字符串并在需要时导入它

        【讨论】:

        • 你的意思是一个包含所有常量的头文件?我已经这样做了,但我认为这不是我的目的
        • 为什么不呢?您可以将它们包含在特定的上下文中并完成
        猜你喜欢
        • 2011-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多