如何使用Objective-C文字检查NSDictionary的密钥

时间:2012-12-04 09:56:50

标签: objective-c nsdictionary

解析JSON时,我会获得NSDictionary 并一次查看一个(已知)密钥。在调试错误时,我开始想知道:我应该如何处理缺少密钥vs值为零?

之前我会用这样的东西来检查密钥是否存在:

    if ([dict objectForKey:@"public"])
        newItem.isPublic = [dict objectForKey:@"public"] ? YES : NO;

但现在我用Objective-C对象文字写了这个。刚开始想知道,这项检查实际上做了什么:

    if (dict[@"public"])
        newItem.isPublic = dict[@"public"] ? @YES : @NO;

我应该检查nil还是[NSNull null]还是有一些更容易,更明显的方式?

1 个答案:

答案 0 :(得分:7)

新的文字语法在这里没有区别。 dict[@"public"]代码已转换为[dict objectForKeyedSubscript:@"public"],其记录与valueForKey:相同,后者又调用objectForKey:

对于条件测试,编写if ([dict objectForKey:@"foo"])if ([dict objectForKey:@"foo"] != nil)相同。换句话说,[NSNull null]在此处计为true,因此您必须明确检查是否需要不同的行为。零不能直接存储在字典中,它必须包含在NSNumber中,再次被视为真值。

另请参阅Objective-C Literals specNSDictionary Class Reference