我已经定义了一个字典,我想传递给其他各种对象。当他们收到这本词典时,他们需要知道它是如何定义的,这样他们就可以解压缩它以获得它的价值。我一直在我的公共标题中使用#define来定义键。这样,我得到编辑时编译器检查以确保我不使用bum密钥。但是有没有其他更标准的方法来声明接口到已定义的字典,以便其他对象在尝试使用未定义的键时会出现编译错误?
答案 0 :(得分:3)
优于#define
是使用常量NSString
。在标题中:
extern NSString * const MyDictionaryFribbleKey;
(这是指向NSString
的常量指针。)在您的实现中:
NSString * const MyDictonaryFribbleKey = @"theFribble";
这是框架导出常量字符串的方式。这不会停止使用无效键,没有什么能真正做到这一点(它是C,你可以绕过任何东西),但它会提高标准。
答案 1 :(得分:1)
为什么不使用对象而不是使用字典呢?
以下示例显示,实际上没有太多额外的工作。此外,您还可以获得实际使用对象的优势。
对象设置
@interface MyClass : NSObject
@property (nonatomic, strong) NSString *myString;
@property (nonatomic, assign) CGFloat myFloat;
@end
@implementation MyClass
@synthesize myString = _myString;
@synthesize myFloat = _myFloat;
@end
MyClass *myClass = [[MyClass alloc] init];
// Set
myClass.myString = @"aa";
myClass.myFloat = 12.0f;
// Get
NSString *myString = myClass.myString
CGFloat myFloat = myClass.myFloat;
<强>·H 强>
extern NSString * const MYClassKeyMyString;
extern NSString * const MYClassKeyMyFloat;
<强>的.m 强>
NSString * const MYClassKeyMyString = @"MYClassKeyMyString";
NSString * const MYClassKeyMyFloat = @"MYClassKeyMyFloat";
NSDictionary *myDict = [[NSMutableDictionary alloc] init];
// Set
[myDict setObject:@"aa" forKey:MYClassKeyMyString];
[myDict setObject:[NSNumber numberWithFloat:12.0f] forKey:MYClassKeyMyFloat];
// Get
NSString *myString = [myDict objectForKey:MYClassKeyMyString];
CGFloat myFloat = [[myDict objectForKey:MYClassKeyMyFloat] floatValue];
答案 2 :(得分:0)
这是一种非常标准的方式。您还可以使用-enumerateKeys方法枚举字典的键。