批量定义常量有什么更聪明的方法吗?

Any smarter way to define constants in bulk?

我想为项目中的所有常量字符串设置宏,我被分配维护。

数据库字段的格式如@"first_name"@"last_name"

我想要的是这样的:

#define kFirstName  @"first_name"
#define kLastName   @"last_name" // And so on.

问题:我有超过 3500 个具有常量字符串的唯一字段。我希望每一个都被定义为宏。

任何更聪明的方法来做到这一点。我正在考虑手动复制、粘贴和编辑它们中的每一个。

标记为 iOS & Objective-C,因为项目本身是一个 iPad 应用程序。

使用 Core Data 时考虑使用 mogenerator,它会为您创建常量值,您可以为所有属性和关系名称引用这些值。

一般来说,像这样定义常量是继续前进的方式iOS,所以你是在正确的轨道上。

您肯定不会在每个字段中至少输入一次。

我推荐以下两种方法之一:

  1. 使用多个 .h 文件来定义所有常量。您可以根据头文件包含的定义对头文件进行分组(例如 UserDefinitions.h 中与用户数据相关的所有字段)。这样你至少可以确保你不必在代码中到处导入所有常量。使用前缀在这种情况下也会有所帮助,因此在所有宏名称前加上它们包含的 .h-文件,例如kUserFirstName让你一眼就知道这个常量是从哪里来的

  2. 在一个(或多个)属性 列表中定义所有常量。这使它们易于维护。只需确保您不会在每次使用其中一个常量时都加载 属性 文件,而是在第一次加载文件后缓存该文件。

最干净的方法是制作一对常量文件(header 和 main)。创建一个新的 class (继承自任何东西,NSObject 说)称它为常量。删除@interface 和@implementation,所以你有一个空的header(除了#import Foundation/Foundation.h)和空的main(除了导入header.)

然后像这样在 header 中声明每个

extern NSString *const kFirstName;

并像这样实现每个(在 .m 文件中)

NSString *const kFirstName = @"Johnny";

确保 .m 文件已添加到目标中,在需要的地方导入 header。