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

JOM*_*JOM 2 objective-c nsdictionary

解析JSON时,我得到NSDictionary并一次通过它一个(已知)密钥.在调试错误时,我开始想知道:我应该如何处理丢失的密钥vs值为零?

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

    if ([dict objectForKey:@"public"])
        newItem.isPublic = [dict objectForKey:@"public"] ? YES : NO;
Run Code Online (Sandbox Code Playgroud)

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

    if (dict[@"public"])
        newItem.isPublic = dict[@"public"] ? @YES : @NO;
Run Code Online (Sandbox Code Playgroud)

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

zou*_*oul 7

新的文字语法在这里没有区别.所述dict[@"public"]成代码被转换[dict objectForKeyedSubscript:@"public"],其被记录为相同valueForKey:,这又呼叫objectForKey:.

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

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