2017-05-25 3 views
-2

Ich habe eine Server-Antwort bekommtSwift3 Wie bekomme ich den Wert eines bestimmten Schlüssels in einer Zeichenfolge?

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

wie kann ich den Wert von agreementId bekommen? Antwort ['conventionId'] funktioniert nicht. Ich habe einen Beispielcode mit .first versucht, aber ich kann es nicht funktionieren.

Einige zusätzliche Informationen, ich tun einen http-Aufruf an einen Server mit Alamofire. Ich versuche, die json auf eine konstante Antwort zu analysieren:

let response = JSON as! NSDictionary 

jedoch, dass gibt eine Fehlermeldung

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

So, jetzt die json auf ein Array zu analysieren, die zu funktionieren scheint. Der obige Code ist was

let response = JSON as! NSArry 
print(response) 

spuckt aus.

Jetzt muss ich nur den Wert vom Schlüssel "confactId" abrufen und ich habe keine Ahnung, wie das geht.

+0

was ist "response", wird ein wörterbuch durch parsing der json abgerufen? Debuggen Sie Ihren Code und überprüfen Sie, was "Antwort" * eigentlich * ist. – luk2302

+0

Welcher Typ ist die Variable JSON? – Spads

Antwort

2

In swift benötigen Sie Swifts nativer Typ Array/[] und Dictionary/[:] statt NSArray und NSDictionary, verwenden, wenn Sie den Typ angeben, wie oben spezifischere bedeutet dann wird der Compiler nicht beklagen. Verwenden Sie auch eine optionale Verpackung mit if let oder guard let, um einen Absturz zu verhindern.

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 
    } 
} 

Hinweis: Wenn Sie mehr als ein Objekt in Ihrem Array mit, dann müssen Sie einfach Schleife durch das Array jedes Wörterbuch des Arrays zuzugreifen.

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

Danke! Das war die Lösung. Und danke für die anderen Hinweise, hilft mir sehr schnell als Neuling –

+0

@JeroenSwets Willkommen Kumpel :) –

Verwandte Themen