【问题标题】:How to check NSDictionary for key using Objective-C literals如何使用 Objective-C 文字检查 NSDictionary 的键
【发布时间】:2012-12-04 09:56:50
【问题描述】:

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

【问题讨论】:

    标签: objective-c nsdictionary


    【解决方案1】:

    新的文字语法在这里没有区别。 dict[@"public"] 代码被翻译成[dict objectForKeyedSubscript:@"public"],据记载它与valueForKey: 相同,而valueForKey: 又调用objectForKey:

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

    另请参阅 Objective-C Literals specNSDictionary Class Reference

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多