2017-04-22 99 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

相关问题