Мне нужно проверить, есть ли у dict ключ или нет. Как?
objective-c
foundation
dontWatchMyProfile
источник
источник
NSDictionary
содержит какой - либо ключ (неспецифический) следуешь использовать[dictionary allKeys].count == 0
Еслиcount
это0
нет ключей вNSDictionary
.Ответы:
objectForKey
вернет ноль, если ключ не существует.источник
[NSNull null]
вместо этого.или
источник
Более поздние версии Objective-C и Clang имеют современный синтаксис для этого:
Вам не нужно проверять равенство с nil, потому что в словарях (или массивах) могут храниться только объекты Objective C, не являющиеся nil. И все объекты Objective-C являются истинными значениями. Даже
@NO
,@0
и[NSNull null]
оценить как истинное.Изменить: Swift теперь вещь.
Для Swift вы бы попробовали что-то вроде следующего
Этот синтаксис будет выполнять блок if, только если myKey находится в dict, и если это так, то значение сохраняется в переменной value. Обратите внимание, что это работает даже для значений фальси, таких как 0.
источник
источник
При использовании словарей JSON:
источник
Мне нравится ответ Фернандеса, даже если вы дважды спрашиваете об объекте.
Это также должно сделать (более или менее то же самое, что и у Мартина А).
Мартин и этот ответ оба работают на iPad2 iOS 5.0.1 9A405
источник
Одна очень неприятная ошибка, которая просто потратила немного моего времени на отладку - вы можете обнаружить, что автозаполнение предложило вам попробовать использовать,
doesContain
что, похоже, работает.Кроме того,
doesContain
вместо сравнения хешей используется сравнение идентификаторов,objectForKey
поэтому если у вас есть словарь со строковыми ключами, он вернет NO в adoesContain
.источник
Используя Swift, это будет:
источник
Да. Ошибки такого рода очень распространены и приводят к сбою приложения. Поэтому я использую, чтобы добавить NSDictionary в каждом проекте, как показано ниже:
//.h код файла:
// код файла ниже
В коде вы можете использовать, как показано ниже:
источник
Для проверки наличия ключа в NSDictionary:
источник
Потому что nil не может быть сохранен в структурах данных Foundation
NSNull
, иногда представляет собойnil
. ПосколькуNSNull
это одноэлементный объект, вы можете проверить,NSNull
является ли значение, сохраненное в словаре, с помощью прямого сравнения указателей:источник
NSNull
экземпляр singleton был сохранен в словаре в качестве значения для ключа@"myKey"
. Это совершенно другая вещь, если ключ@"myKey"
отсутствует в словаре - на самом деле оба они взаимоисключающие.Решение для swift 4.2
Итак, если вы просто хотите ответить на вопрос, содержит ли словарь ключ, спросите:
Если вам нужно значение и вы знаете, что словарь содержит ключ, скажите:
Но если, как обычно бывает, вы не знаете, что он содержит ключ - вы хотите получить его и использовать, но только если он существует - тогда используйте что-то вроде
if let
:источник
Я бы посоветовал вам сохранить результат поиска во временной переменной, проверить, является ли временная переменная ноль, а затем использовать его. Таким образом, вы не увидите один и тот же объект дважды:
источник
Как Adirael предложил
objectForKey
проверить наличие ключа, но когда вы вызываетеobjectForKey
в обнуляемом словаре, приложение зависает, поэтому я исправил это следующим образом.}
источник
источник