2017-04-22 63 views
-1
let orderID = (responceDictionary as NSDictionary).value(forKeyPath: "result.id") as? String 

錯誤: '[AnyHashable:Any]?'不轉換爲「NSDictionary的」Xcode Swift - 任何不可轉換爲NSDictionary

我不完全知道如何從任意投 - >的NSDictionary但作爲一個字符串,它似乎與我試圖拋出錯誤。

let orderID = (responceDictionary as! NSDictionary).value(forKeyPath: "result.id") as? String 

以上編譯但使用此引發另一個錯誤:將永遠失敗。

Moltin.sharedInstance().cart.order(withParameters: orderParameters, success: { (responceDictionary) in 

     let orderID = (responceDictionary as NSDictionary).value(forKeyPath: "result.id") as? String 
+0

什麼樣的反應,你在這裏嘗試分析的麻煩。請添加JSON結構。 –

+0

@AdilSoomro我已經添加到問題。 – Owen26

回答

0

[any hashable:any]不是NSDictionary。在第二個變種中,你保證它可以澆注,但它不會因此而崩潰。

忽略的NSDictionary。從Obj-C來的時候知道這很難。 個人最近,我這個曾經:

let jsonDictionary = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as! Dictionary<String, Any> 
let conversationID = jsonDictionary["conversationId"] as! String? 

的conversationId將是一個可選的字符串。 如果您使用它,將投射到對象或結構中。節省每次鑄造

+0

你會如何去存儲responceDictionary作爲一個字典,所以我可以在未來的功能使用,同時確保響應被存儲爲一個字符串? – Owen26

+1

使用'as!字符串?'很奇怪。爲什麼強制轉換爲可選項?使用'as?字符串「,最好用'if let'。 – rmaddy

+0

@rmaddy我在這行下面使用了一個if let語句。儘管一個答案幫助我理解了這一點,但我仍然在同一部分中掙扎。我還沒有想出一個解決方案... – Owen26