2

我知道 Objective-C 允许我使用@selector(@"name")如何在运行时按名称访问以下常量来按名称引用选择器?换句话说,我会经过@"CONST_KEY"某个地方然后@"key"回来。

const NSString* CONST_KEY = @"key";

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

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

这样我希望在我的代码中有一个地方来修改常量,而不是在多个类中重新分配值。链接这两个值将允许我对所有这些单元格使用单个操作CONST_KEY来定义它们将要执行的操作。

4

2 回答 2

0

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

于 2015-04-08T15:43:14.180 回答
-1

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

在导入语句正下方的头文件中(@interface 之前)声明:

extern NSString *const CONST_KEY;

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

NSString *const CONST_KEY = @"key";

在你这样做之后,在任何导入你声明常量的类的类中,你将能够简单地使用 CONST_KEY 引用它

例如

[someDictionary objectForKey: CONST_KEY];

或者

NSLog(@"%@", CONST_KEY); 

等等等等——使用这个约定对于类型安全很有好处。我用它所有的时间。

于 2015-04-08T15:40:57.303 回答