La meilleure pratique pour savoir si SwiftyJSON dictionnaire a la clé
J'essaie de trouver un moyen d'obtenir la valeur d'une clé dans un SwiftyJSON dictionnaire et de retourner une chaîne par défaut, si la clé n'est pas définie. L'exemple suivant fonctionne bien, mais je ne suis pas vraiment satisfait. Connaissez-vous un moyen plus élégant?
Exemple:
let users: JSON = [
["id": 1, "name": "one"],
["id": 2],
["id": 3, "name": "three"]
]
for (key: String, user: JSON) in users {
println(user.object.objectForKey("name") != nil
? user["name"].stringValue
: "default")
}
- avez-vous jamais trouver une solution à cela? merci!
- non, malheureusement pas
- Je pense qu'il y a de mieux JSON bibliothèques de nos jours, dans la plupart des cas d'utilisation ObjectMapper marche beaucoup mieux, puisqu'il sera de créer des objets au lieu d'avoir à slug par le biais de toutes sortes de stringly tapé facultatif des éléments dans le dictionnaire.
Vous devez vous connecter pour publier un commentaire.
La dernière version de SwiftyJSON a la
exists()
fonction.NOTE: Leur documentation la plus récente, ne reflète pas le code très bien... La méthode est
exists()
isExists()
.exists()
de la syntaxe.Il semble, SwiftyJSON définit la
error
bien quandsubscript
non-existants.Donc, cela devrait fonctionner:
Par exemple: w/Version 6.1.1 (6A2006), SwiftyJSON github maître actuel:
imprime:
let name = user["name"];
.Si vous avez besoin de vérifier si un
SwiftyJSON
dictionnaire a une clé, vous pouvez la comparer avecJSON.null
comme suit:L'aide de cette méthode, votre code pourrait ressembler à ceci:
Si vous voulez juste pour fournir une valeur par défaut, vous pouvez utiliser le Nul Coalescence De L'Opérateur dans Swift (
??
) comme ceci:SwiftJSON fournit la
string
méthode, qui renvoie une valeur facultative (String?
), contrairement àstringValue
qui renvoie toujours uneString
.Des objets de type
JSON
ont une propriété calculée appelénull
. Cela renvoieNSNull
si l'élément demandé n'existe pas,nil
si elle n'. Vous pouvez donc tester l'existence d'un objet spécifique en l'extrayant de son parentJSON
et de tests pour voir si lenull
propriété existe. Je m'occupe personnellement de cette façon:Dans votre cas particulier, vous pouvez utiliser ceci:
...mais puisque nous savons que nous sommes à la recherche pour une chaîne de caractères, nous pouvons couper vers le bas encore plus loin. Tous vous avez vraiment besoin pour faire est de déposer de la "Valeur" de la partie de
stringValue
, depuisstring
sera de retour nul si il ne peut pas générer une chaîne de caractères à partir de son contenu. Aussi, découvrez le néant, la coalescence de l'opérateur??
. Il est conçu pour fournir une valeur par défaut pour les variables facultatives, essayez donc ceci:Nice et compact!
Aussi loin que je peux dire, cela fonctionne:
À expliquer, vous voulez jeter de la
JSON
objet pour les types que vous vous attendez à obtenir. Si vous voulez du genre à toujours réussir (pas d'option), l'utilisationxxxValue
. Par conséquent, nous jette la racine de l'objet à l'aide dearrayValue
.arrayValue
retourne[JSON]
, qui nous traverse dans la boucle. Nous n'avons pas besoin de cas de lajsonDict: JSON
pour objet, comme SwiftyJSON est assez intelligent pour assumer c'est une dict à partir de l'indice des opérateurs.Enfin, en essayant de récupérer une clé à partir de la dict, puis de vérifier si la clé peut être extrait sous la forme d'une chaîne à l'aide de
.string
, qui est facultatif. Utiliser la valeur null coalescence pour affecter une valeur par défaut.Veuillez voir le SwiftJSON doc pour
string
etstringValue
Note: Cette réponse n'est plus valide
Semble que l'utilisation parfaite de
if let
de la syntaxe. Parce que l'accès à l'indice sera de retour facultatif, le lier à une variable dans uneif let
bloc. Cela vous indiquera si ou non la clé était dans leJSON
.