我可以在运行时通过字符串名称访问ObjC常量吗?

时间:2015-04-08 15:32:21

标签: objective-c runtime constants symbolic-references

我知道Objective-C允许我使用@selector(@"name")按名称引用选择器如何在运行时按名称访问以下常量?换句话说,我会在某处传递@"CONST_KEY"并返回@"key"

const NSString* CONST_KEY = @"key";

我想我可以先创建一个键值字典,然后在运行时查询它,但我不确定是否有更好的实现。

用具体用例澄清:
我想使用在我的故事板中声明的集合视图单元重用标识@"CONST_KEY",并且能够使用此标识符在运行时查找CONST_KEY的值。

这样我希望在我的代码中有一个位置来修改常量,而不是必须在多个类中重新赋值。将两个值相关联将允许我使用CONST_KEY为所有这些单元格执行单个操作来定义他们将要执行的操作。

2 个答案:

答案 0 :(得分:0)

Objective C只是一个带有附加对象功能的C.因此在编译期间会丢弃“CONST_KEY”常量名称。因此,您必须创建自己的类或使用NSDictionary来提供“constant_name” - >“constant_value”功能。

答案 1 :(得分:-1)

您不需要调用选择器来获取常量,您只需要将它暴露给其他类。常数也应该存在于相关类中。我使用的方法如下。

导入语句正下方的头文件中的

(在@interface之前)声明:

extern NSString *const CONST_KEY;

在相同位置的实现文件中(@interface和@implementation上面)声明:

NSString *const CONST_KEY = @"key";

执行此操作后,在任何导入您声明常量的类的类中,您只需使用CONST_KEY

即可引用它。

E.G。

[someDictionary objectForKey: CONST_KEY];

NSLog(@"%@", CONST_KEY); 

等等 - 使用此约定非常适合类型安全。我一直都在使用它。