我知道Objective-C允许我使用@selector(@"name")
按名称引用选择器如何在运行时按名称访问以下常量?换句话说,我会在某处传递@"CONST_KEY"
并返回@"key"
。
const NSString* CONST_KEY = @"key";
我想我可以先创建一个键值字典,然后在运行时查询它,但我不确定是否有更好的实现。
用具体用例澄清:
我想使用在我的故事板中声明的集合视图单元重用标识@"CONST_KEY"
,并且能够使用此标识符在运行时查找CONST_KEY
的值。
这样我希望在我的代码中有一个位置来修改常量,而不是必须在多个类中重新赋值。将两个值相关联将允许我使用CONST_KEY
为所有这些单元格执行单个操作来定义他们将要执行的操作。
答案 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);
等等 - 使用此约定非常适合类型安全。我一直都在使用它。