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

エラー: '[AnyHashable:Any]?' 'NSDictionary'に変換できませんXcode Swift - NSDictionaryに変換できないもの

Any - > 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ではありません。 2番目の派閥では、あなたはそれをキャスタブルにすることができますが、それは失われ、クラッシュします。

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

'として!文字列? 'は奇妙です。なぜ強制的にオプションにキャストするのですか? 'を使って?文字列 'を使用します。 – rmaddy

+0

@rmaddyこの行の下にif let文を使用しています。 1つの答えが私にそれを理解するのを助けたが、私はまだ同じ部分で苦労している。私は解決策を思いついたわけではありません... – Owen26

関連する問題