2015-04-08 23 views
1

我知道Objective-C允许我通过名称使用@selector(@"name")来引用选择器如何在运行时按名称访问以下常量?换句话说,我会在某个地方通过@"CONST_KEY"并返回@"key"我可以在运行时通过字符串名称访问一个ObjC常量吗?

const NSString* CONST_KEY = @"key"; 

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

要与特定使用案例澄清:
我想用一个集合视图电池再利用标识@"CONST_KEY",在我的故事板申报,并能够使用这个标识来查找的CONST_KEY值在运行时。

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

+1

我真的不明白这个问题 - 这不就是一个全局变量吗?你访问全局变量并返回值?额外的间接层给你带来了什么?如果你需要通过一个密钥访问,那么字典似乎是一个明显的途径;字典有什么问题?你想解决什么问题? –

+0

我试图将全局变量链接到故事板中的单元格标识符。 –

回答

-1

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

在头文件右下方import语句

(@interface之前)声明如下:

extern NSString *const CONST_KEY; 

在同一个地方(以上@interface和@implementation)实现文件中声明这一点:

NSString *const CONST_KEY = @"key"; 

完成该操作后,在进口,你宣布你的恒定类中的任何类,你就可以简单地用CONST_KEY引用它

E.G.

[someDictionary objectForKey: CONST_KEY]; 

NSLog(@"%@", CONST_KEY); 

等等等等 - 使用这个约定是伟大的类型安全。我用它所有的时间。

+1

这忽略了问题的关键。 OP似乎希望在运行时使用动态引用访问常量,而不是硬编码引用(如答案中所示)。 – rmaddy

0

Objective C只是一个带有添加对象功能的C语言。所以在编译过程中“CONST_KEY”常量名将被丢弃。所以你必须创建自己的类或使用NSDictionary来提供“constant_name” - >“constant_value”功能。

相关问题