我知道Objective-C允许我使用@selector(@"name")
按名称引用选择器。如何在运行时按名称访问以下常量?换言之,我会在某个地方通过@"CONST_KEY"
,然后取回@"key"
。
const NSString* CONST_KEY = @"key";
我想我可以先创建一个键值字典,然后在运行时查询它,但我不确定是否有更好的实现。
要通过特定用例进行澄清:
我想使用在我的故事板中声明的集合视图单元格重用标识符@"CONST_KEY"
,并能够在运行时使用该标识符查找CONST_KEY
的值。
通过这种方式,我希望在代码中有一个单独的位置来修改常量,而不必在多个类中重新赋值。通过链接这两个值,我可以使用CONST_KEY
为所有这些单元格定义一个操作。
Objective C只是一个添加了对象功能的C。因此,"CONST_KEY"常量名称在编译过程中被丢弃。因此,您必须创建自己的类或使用NSDictionary来提供"constant_name"->"constant_value"功能。
您不需要调用选择器来获取常量,只需要将其公开给其他类即可。常量也应该存在于它的相关类中。我使用的方法如下。
在导入语句正下方的头文件中(在@interface之前)声明:
extern NSString *const CONST_KEY;
在同一位置的实现文件中(在@interface和@implementation之上)声明:
NSString *const CONST_KEY = @"key";
在您这样做之后,在任何导入您声明常量的类的类中,您将能够简单地使用CONST_KEY 引用它
例如
[someDictionary objectForKey: CONST_KEY];
或
NSLog(@"%@", CONST_KEY);
等等–使用此约定对类型安全非常有利。我一直在用它。