Cocoa/Objective-C - 验证NSDictionary上是否存在密钥

fab*_*tos 11 cocoa objective-c nsdictionary ios

如何验证密钥是否存在NSDictionary

我知道如何验证它是否有一些内容,但我想非常,如果它存在,因为它是动态的,我必须防止它.就像在某些情况下,它可能碰巧有一个带有"名称"的键并且是值,但在另一种情况下,可能会发生这对值不存在的情况.

CRD*_*CRD 21

最简单的方法是:

[dictionary objectForKey:@"key"] != nil
Run Code Online (Sandbox Code Playgroud)

因为字典返回nil非存在的键(因此你不能将nil存储在字典中,因为你使用的字符串NSNull).

编辑:回答评论布拉德利的答案

你进一步问:

有没有办法验证是否:[[[contactDetailsDictionary objectForKey:@"professional"] objectForKey:@"CurrentJob"] objectForKey:@"Role"]存在?不是一个单一的密钥,因为它是一个非常庞大的字典,所以它可以存在于另一个类别中.

在Objective-C中你可以发送一条消息nil,它不是一个错误并返回nil,所以扩展上面的简单方法你只需写:

[[[contactDetailsDictionary objectForKey:@"professional"] 
                              objectForKey:@"CurrentJob"] 
                                objectForKey:@"Role"] != nil
Run Code Online (Sandbox Code Playgroud)

好像LHS的任何部分都不存在一样,LHS返回 nil


Bra*_*ndy 7

NSDictionary将所有键作为a返回NSArray,然后containsObject在数组上使用.

NSDictionary* dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"object", @"key"];
if ([[dictionary allKeys] containsObject:@"key"]) {
  NSLog(@"'key' exists.");
}
Run Code Online (Sandbox Code Playgroud)

  • 那个回复太可怕了.很难想象你怎么能以更低效的方式做到这一点.多么浪费内存和CPU时间. (2认同)