我有一个 .h 文件,它定义了几百个常量。让我们假设这是其中之一:
#define KDSomeItem 1
我知道 Objective-C 运行时 API 可用于检索实例变量名称列表:如本问题所述:How do I list all fields of an object in Objective-C?
我还知道 getter [object valueForKey:theName]
可用于访问 ivars,如我之前的问题所示:How to access a property/variable using a String holding its name
我的问题是可以用常量做类似的事情吗?那就是我可以:
a) 以编程方式获取所有常量的列表
b) 如果我有一个保存常量名称的字符串,则访问常量
例如如果我有一个像这样的字符串 NSString * theName = @"KDSomeItem";
我可以使用这个字符串来评估我的常量吗?
最佳答案
您将无法执行此操作:与实例变量不同,#define
-d 常量在预处理器处理完后不会留下痕迹。他们没有留下任何元数据 - KDSomeItem
的所有实例程序主体中的内容将替换为 1
甚至在 Objective C 编译器正确分析您的代码之前。
如果您需要在运行时使用常量名称,则需要自己构建所有必要的元数据。为此,您可能需要研究预处理器的“字符串化”运算符:
#define STR(X) #X
这个宏可以应用于预处理器常量,并生成一个带有其名称的 C 字符串文字:
const char *nameOfKDSomeItem = STR(KDSomeItem); // same as "KDSomeItem"
关于objective-c - 如何使用保存名称的字符串来访问常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12113167/