【发布时间】:2012-10-16 22:48:27
【问题描述】:
如何验证NSDictionary 上是否存在密钥?
我知道如何验证它是否有一些内容,但我很想验证它是否存在,因为它是动态的,我必须阻止它。就像在某些情况下,它可能碰巧有一个带有“名称”的键并且是值,但在另一些情况下,这对值可能不存在。
【问题讨论】:
标签: ios objective-c cocoa nsdictionary
如何验证NSDictionary 上是否存在密钥?
我知道如何验证它是否有一些内容,但我很想验证它是否存在,因为它是动态的,我必须阻止它。就像在某些情况下,它可能碰巧有一个带有“名称”的键并且是值,但在另一些情况下,这对值可能不存在。
【问题讨论】:
标签: ios objective-c cocoa nsdictionary
最简单的方法是:
[dictionary objectForKey:@"key"] != nil
由于字典为不存在的键返回 nil(因此您不能在字典中存储 nil,因为您使用 NSNull)。
编辑:对布拉德利的回答发表评论的回答
你进一步问:
有没有办法验证: [[[contactDetailsDictionary objectForKey:@"professional"] objectForKey:@"CurrentJob"] objectForKey:@"Role"] 是否存在?不是一个键,因为是一个非常大的字典,所以它可以存在于另一个类别中。
在Objective-C中可以给nil发消息,不会报错,返回nil,所以扩展上面的简单方法就可以了:
[[[contactDetailsDictionary objectForKey:@"professional"]
objectForKey:@"CurrentJob"]
objectForKey:@"Role"] != nil
如果键序列的任何部分不存在,LHS 将返回 nil
【讨论】:
[contactDetailsDictionary valueForKeyPath:@"professional.CurrentJob.Role"]。
objectForKey,不是objectForkey。
NSDictionary 将所有键作为NSArray 返回,然后在数组上使用containsObject。
NSDictionary* dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"object", @"key"];
if ([[dictionary allKeys] containsObject:@"key"]) {
NSLog(@"'key' exists.");
}
【讨论】:
NSDictionary的方法调用替换dictionary。
if 条件相同。