如何公开声明 NSDictionary 的键?
我定义了一个字典,我想将其传递给各种其他对象。当他们收到这本字典时,他们需要知道它是如何定义的,以便他们可以解压它以获取它的值。我一直在公共标头中使用#define 来定义键。这样,我就可以在编辑时进行编译器检查,以确保我没有使用无用的密钥。但是是否有其他更标准的方法来声明已定义字典的接口,以便其他对象在尝试使用未定义的键时会出现编译错误?
I have defined a dictionary that I would like to pass around to various other objects. When they receive this dictionary, they need to know how it is defined so they can unpack it to get its values. I've been using #define's in my public header to define the keys. That way, I get edit-time compiler checking to ensure I don't use a bum key. But is there some other, more standard way to declare the interface to a defined dictionary so that other objects will get compile errors if they try to use undefined keys?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
比
#define
更好的是使用常量NSString
。在您的标头中:(这是一个指向
NSString
的常量指针。)在您的实现中:这就是框架导出常量字符串的方式。这不会阻止使用无效密钥,没有什么能真正做到这一点(它是 C,你可以绕过任何东西),但它提高了标准。
Better than
#define
is to use constantNSString
s. In your header:(That's a constant pointer to an
NSString
.) And in your implementation:This is how the frameworks export constant strings. This won't stop the use of invalid keys, nothing will really do that (it's C, you can bypass anything), but it raises the bar higher.
为什么不使用字典而不使用对象呢?
下面的示例表明实际上并没有涉及太多额外的工作。另外,您还可以获得实际使用对象的优势。
对象设置
对象使用
NSDictionary 设置
.h
.m
NSDictionary 使用
Instead of using a dictionary why not use an object?
The example below shows that there really isn't much extra work involved. Plus you gain the advantages of actually using objects.
Object Set up
Object use
NSDictionary Set up
.h
.m
NSDictionary use
这是一个非常标准的方式。您还可以使用 -enumerateKeys 方法枚举字典的键。
That's a pretty standard way. You can also enumerate the keys of a dictionary using the -enumerateKeys method.