Как проверить, содержит ли ключ NSDictionary или NSMutableDictionary? - PullRequest
451 голосов
/ 07 мая 2010

Мне нужно проверить, есть ли у диктанта ключ или нет. Как?

Ответы [ 15 ]

3 голосов
/ 08 июля 2011

Поскольку nil не может быть сохранен в структурах данных Foundation, NSNull иногда представляет nil. Поскольку NSNull является одноэлементным объектом, вы можете проверить, является ли NSNull значением, сохраненным в словаре, с помощью прямого сравнения указателей:

if ((NSNull *)[user objectForKey:@"myKey"] == [NSNull null]) { }
2 голосов
/ 13 февраля 2019

Раствор для swift 4.2

Итак, если вы просто хотите ответить на вопрос, содержит ли словарь ключ, спросите:

let keyExists = dict[key] != nil

Если вам нужно значение и вы знаете, что словарь содержит ключ, скажите:

let val = dict[key]!

Но если, как обычно, вы не знаете, что он содержит ключ - вы хотите получить его и использовать, но только если он существует - тогда используйте что-то вроде if let:

if let val = dict[key] {
    // now val is not nil and the Optional has been unwrapped, so use it
}
1 голос
/ 10 августа 2018

Как Адираэль предложил objectForKey проверить наличие ключа, но когда вы вызываете objectForKey в словаре, допускающем обнуление, происходит сбой приложения, поэтому я исправил это следующим образом.

- (instancetype)initWithDictionary:(NSDictionary*)dictionary {
id object = dictionary;

if (dictionary && (object != [NSNull null])) {
    self.name = [dictionary objectForKey:@"name"];
    self.age = [dictionary objectForKey:@"age"];
}
return self;

}

1 голос
/ 26 июня 2011

Я бы посоветовал вам сохранить результат поиска во временной переменной, проверить, равна ли переменная временная переменная нулю, а затем использовать его. Таким образом, вы не увидите один и тот же объект дважды:

id obj = [dict objectForKey:@"blah"];

if (obj) {
   // use obj
} else {
   // Do something else
}
0 голосов
/ 19 апреля 2017
if ([MyDictionary objectForKey:MyKey]) {
      // "Key Exist"
} 
...