2017-05-25 1 views
-2

J'ai une réponse du serveur retourSwift3 comment puis-je obtenir la valeur d'une clé spécifique dans une chaîne?

(
    { 
    agreementId = "token.virtual.4321"; 
    city = AMSTERDAM; 
    displayCommonName = "bunch-of-alphanumeric"; 
    displaySoftwareVersion = "qb2/ene/2.7.14"; 
    houseNumber = 22; 
    postalCode = zip; 
    street = ""; 
    } 
) 

comment puis-je obtenir la valeur de agreementId? response ['agreementId'] ne fonctionne pas. J'ai essayé un exemple de code avec .first mais je n'arrive pas à le faire fonctionner.

Quelques informations supplémentaires, je fais un appel http à un serveur avec alamofire. J'essaie d'analyser le JSON à une réponse constante:

let response = JSON as! NSDictionary 

Cependant qui renvoie un message d'erreur

Could not cast value of type '__NSSingleObjectArrayI' (0x1083600) to 'NSDictionary' (0x108386c). 

donc maintenant analyser le JSON à un tableau, qui semble fonctionner. Le code ci-dessus est ce que

let response = JSON as! NSArry 
print(response) 

crache.

Maintenant, j'ai juste besoin de récupérer la valeur de la clé "agreementId" et je n'ai aucune idée de comment faire cela.

+0

Qu'est-ce que 'response', est-ce qu'un dictionnaire est récupéré en analysant le json? Déboguez votre code et inspectez ce que 'response' * en réalité * est. – luk2302

+0

De quel type est la variable JSON? – Spads

Répondre

2

Dans rapide, vous devez utiliser le type natif de Swift Array/[] et Dictionary/[:] au lieu de NSArray et NSDictionary, si vous spécifiez le type comme ci-dessus signifie plus spécifique que le compilateur ne se plaindra pas. Utilisez également l'habillage optionnel avec if let ou guard let pour éviter les accidents.

if let array = JSON as? [[String:Any]] {//Swift type array of dictionary 
    if let dic = array.first { 
     let agreementId = dic["agreementId"] as? String ?? "N/A"//Set default value instead N/A 
     print(agreementId) 
     //access the other key-value same way 
    } 
} 

Note: Si vous ayant plus d'un objet dans votre tableau, alors vous devez faire une boucle à travers le réseau pour accéder à chaque dictionnaire de tableau.

if let array = JSON as? [[String:Any]] {//Swift type array of dictionary 
    for dic in array { 
     let agreementId = dic["agreementId"] as? String ?? "N/A"//Set default value instead N/A 
     print(agreementId) 
     //access the other key-value same way 
    } 
} 
+1

Merci! C'était la solution. Et merci pour les autres pointeurs, m'aide beaucoup comme newb rapide –

+0

@JeroenSwets Bienvenue mate :) –