确保Objective-C字典密钥在整个应用程序中保持一致的最佳实践?
如果我定义了一个字典,其中包含一些我想传递给另一个类的值。我是否应该将键设置为常量,这样我就可以在其他类中使用它们,而不用担心键入的是否正确。这种情况下的共同立场是什么 如果可以将所有允许的字典键设置为常量,那么您还可以创建一个带有相应字段的自定义类,并传递该类而不是字典。如果类的用户需要通过编译时不可用的符号访问字段,那么他们也可以使用键值编程来检索字段值 如果由于其他原因必须传递字典,则可以使用键创建确保Objective-C字典密钥在整个应用程序中保持一致的最佳实践?,objective-c,dictionary,Objective C,Dictionary,如果我定义了一个字典,其中包含一些我想传递给另一个类的值。我是否应该将键设置为常量,这样我就可以在其他类中使用它们,而不用担心键入的是否正确。这种情况下的共同立场是什么 如果可以将所有允许的字典键设置为常量,那么您还可以创建一个带有相应字段的自定义类,并传递该类而不是字典。如果类的用户需要通过编译时不可用的符号访问字段,那么他们也可以使用键值编程来检索字段值 如果由于其他原因必须传递字典,则可以使用键创建enum,并使用@前缀enum值,将它们自动包装到NSNumber对象中: enum {
enum
,并使用@
前缀enum
值,将它们自动包装到NSNumber
对象中:
enum {
kFirstKey
, kSecondKey
, kThirdKey
};
...
NSDictionary *dict = @{
@(kFirstKey) : @"Quick"
, @(kSecondKey) : @"brown"
@(kThirdKey) : @"fox"
};
您可以使用
enum
和NSNumber
来框选键
某些头文件:
typedef enum {
DictionaryKeyOneKey,
DictionaryKeyAnotherKey
} DictionaryKey;
可以定义用于装箱键的方便方法或宏:
#define boxKey(k) [NSNumber numberWithInt:k]
然后在客户端代码中:
NSMutableDictionary *dict;
...
NSObject *object = [dict objectForValue:boxKey(DictionaryKeyOneKey)];
[dict setObject:object forKey:boxKey(DictionaryKeyAnotherKey)];
我认为只制作常量字符串更常见。这样,您就不必经常执行
@()
仪式。我可以使用自定义类,因此,例如,您认为在ObjC中为http请求创建自定义类(例如:RegistrationRequest)并将其传递给将使用该请求发布值的注册类是常见的吗?@Jimmy将自定义类的对象用于字典键似乎有些过分,尽管这肯定没有什么问题。我对别人编写的iOS代码的接触很少,从Cocoa框架设计来看,这并不常见:苹果到处使用enum
s。然而,我绝对同意苹果可能会受到维护遗留代码需求的限制。