2

解析 JSON时,我得到 NSDictionary并一次通过一个(已知)键。在调试错误时,我开始想:我应该如何处理丢失的键与值为零的问题?

早些时候我会使用这样的东西来检查密钥是否存在:

    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] 还是有一些更简单、更明显的方法?

4

1 回答 1

8

新的文字语法在这里没有区别。代码被dict[@"public"]翻译成[dict objectForKeyedSubscript:@"public"],它被记录为与valueForKey:,它反过来调用objectForKey:

至于条件测试,写法if ([dict objectForKey:@"foo"])if ([dict objectForKey:@"foo"] != nil)。换句话说,[NSNull null]这里算为真,所以如果你想要不同的行为,你必须明确检查。零不能直接存储在字典中,它必须包装在 中NSNumber,再次被视为真值。

另请参阅Objective-C Literals 规范NSDictionary 类参考

于 2012-12-04T10:05:49.817 回答