Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确保Objective-C字典密钥在整个应用程序中保持一致的最佳实践?_Objective C_Dictionary - Fatal编程技术网

确保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。然而,我绝对同意苹果可能会受到维护遗留代码需求的限制。