Je dois vérifier si un dict a une clé ou non. Comment?
objective-c
foundation
dontWatchMyProfile
la source
la source
NSDictionary
contient une clé (non spécifique), vous devez utiliser[dictionary allKeys].count == 0
Si lecount
est0
il n'y a pas de clés dans leNSDictionary
.Réponses:
objectForKey
retournera nil si une clé n'existe pas.la source
[NSNull null]
place.ou
la source
Les versions plus récentes d'Objective-C et de Clang ont une syntaxe moderne pour cela:
Il n'est pas nécessaire de vérifier l'égalité avec nil, car seuls les objets Objective-C non nuls peuvent être stockés dans des dictionnaires (ou des tableaux). Et tous les objets Objective-C sont des valeurs véridiques. Même
@NO
,@0
et[NSNull null]
évaluez comme vrai.Edit: Swift est maintenant une chose.
Pour Swift, vous essayez quelque chose comme le suivant
Cette syntaxe n'exécutera le bloc if que si myKey est dans le dict et si c'est le cas, la valeur est stockée dans la variable value. Notez que cela fonctionne même pour les valeurs de falsey comme 0.
la source
la source
Lors de l'utilisation de dictionnaires JSON:
la source
J'aime la réponse de Fernandes même si vous demandez l'obj deux fois.
Cela devrait également faire (plus ou moins la même chose que Martin A).
Martin et cette réponse fonctionnent tous les deux sur iPad2 iOS 5.0.1 9A405
la source
Un piège très méchant qui vient de perdre un peu de mon temps à déboguer - vous pouvez vous retrouver invité par la saisie semi-automatique à essayer d'utiliser
doesContain
ce qui semble fonctionner.Sauf,
doesContain
utilise une comparaison d'id au lieu de la comparaison de hachage utilisée parobjectForKey
donc si vous avez un dictionnaire avec des clés de chaîne, il retournera NON à adoesContain
.la source
Avec Swift, ce serait:
la source
Oui. Ce type d'erreurs est très courant et entraîne un plantage de l'application. J'utilise donc pour ajouter NSDictionary dans chaque projet comme ci-dessous:
//.h code de fichier:
Le code de fichier //.m est comme ci-dessous
Dans le code, vous pouvez utiliser comme ci-dessous:
la source
Pour vérifier l'existence d'une clé dans NSDictionary:
la source
Parce que rien ne peut être stocké dans les structures de données Foundation,
NSNull
c'est parfois pour représenter anil
. Parce qu'ilNSNull
s'agit d'un objet singleton, vous pouvez vérifier siNSNull
la valeur est stockée dans le dictionnaire à l'aide de la comparaison directe de pointeurs:la source
NSNull
instance singleton a été stockée dans le dictionnaire comme valeur pour la clé@"myKey"
. C'est une chose totalement différente que la clé@"myKey"
ne soit pas dans le dictionnaire - en effet, les deux s'excluent mutuellement.Solution pour Swift 4.2
Donc, si vous voulez simplement répondre à la question de savoir si le dictionnaire contient la clé, demandez:
Si vous voulez la valeur et que vous savez que le dictionnaire contient la clé, dites:
Mais si, comme cela arrive habituellement, vous ne savez pas qu'elle contient la clé - vous voulez la récupérer et l'utiliser, mais seulement si elle existe - alors utilisez quelque chose comme
if let
:la source
Je vous suggère de stocker le résultat de la recherche dans une variable temporaire, de tester si la variable temporaire est nulle et de l'utiliser ensuite. De cette façon, vous ne regardez pas le même objet deux fois:
la source
Comme Adirael a suggéré
objectForKey
de vérifier l'existence des clés, mais lorsque vous appelezobjectForKey
dans un dictionnaire annulable, l'application est bloquée, j'ai donc corrigé cela de la manière suivante.}
la source
la source