当解析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]还是有一些更容易,更明显的方式?
答案 0 :(得分:7)
新的文字语法在这里没有区别。 dict[@"public"]
代码已转换为[dict objectForKeyedSubscript:@"public"]
,其记录与valueForKey:
相同,后者又调用objectForKey:
。
对于条件测试,编写if ([dict objectForKey:@"foo"])
与if ([dict objectForKey:@"foo"] != nil)
相同。换句话说,[NSNull null]
在此处计为true,因此您必须明确检查是否需要不同的行为。零不能直接存储在字典中,它必须包含在NSNumber
中,再次被视为真值。