2017-05-25 70 views
-2

我有一個服務器響應返回Swift3我如何獲取字符串中特定鍵的值?

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

我怎麼AGREEMENTID的價值?響應['agreementId']不起作用。我已經用.first嘗試了一些示例代碼,但是我無法正常工作。

一些額外的信息,我做了一個http調用alamofire服務器。我嘗試了JSON解析到一個固定的響應:

let response = JSON as! NSDictionary 

但是返回一個錯誤信息

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

所以,現在的JSON解析到一個數組,這似乎是工作。上面的代碼是

let response = JSON as! NSArry 
print(response) 

吐出來。

現在我只需要檢索key「agreementId」的值,我不知道該怎麼做。

+0

什麼是「響應」,是通過解析json檢索的字典?調試你的代碼並檢查「響應」*實際*是什麼。 – luk2302

+0

變量JSON是什麼類型? – Spads

回答

2

在SWIFT你需要使用Swift的原生型Array/[]Dictionary/[:]代替NSArrayNSDictionary,如果指定的類型像上面意味着更具體的那麼編譯器不會抱怨。還可以使用可選包裝if letguard let來防止崩潰。

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

注:如果您有您的陣列中的多個對象,那麼你需要簡單地遍歷數組訪問陣列的每個字典。

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

謝謝!這是解決方案。並感謝其他的指針,幫助我很多作爲swift newb –

+0

@JeroenSwets歡迎隊友:) –

相關問題