2016-08-30 6 views
3

私はセットアップに迅速で簡単な辞書しようとしている:コンテキストタイプは「ANYOBJECT」辞書リテラルで使用することはできません - データ構造一貫していない

var dict = [ 
    "_id": "123", 
    "profile": [ 
    "name": "me", 
    "username": nil, 
    ] 
] as [String : Any] 

しかしContextual type 'AnyObject' cannot be used with dictionary literalで失敗します。 this questionに続いて、[String : Any][String : [String : Any]]に置き換えようとしましたが、最初の値がStringであり、[String : Any]ではないため、論理的には失敗します。

私はjsonとして表現できるデータを保持するものを持ちたいと思っています。後でアクセスしようとしたときにガードキャストする必要はありません。

答えて

5

スウィフトは、厳密に型指定された言語であるので、問題はあなたが辞書にnilを追加するとき、タイプがあると言って文句を言うでしょうがそうであることを行ってその値を入力するかを知ることができないということですあいまいな

あなたは、次の手順を実行して、辞書のキーと値の種類を指定することができます。

let profile: [String: AnyObject?] = ["name": "me", "username": nil]  
let dict = ["_id": "123", "profile": profile] as [String : Any] 

また、あなたは辞書を作成するために、init(dictionaryLiteral:)コンストラクタを使用することができます。私は見

let dict = [ 
    "_id": "123", 
    "profile": Dictionary<String, AnyObject?>(dictionaryLiteral: ("name", "me"), ("username", nil)) 
] as [String : Any] 
+0

を。それでも、物事が乱雑になるのは変です。とにかく私があなたの答えに従えば、私は 'JSONSerialization.isValidJSONObject(dict)'を 'false'にします。何が起こっているの任意のアイデア? Jsonは厳密に型付けされたものに近いものは何も持っていないので、私は例外ではない。 – Guig

+0

@Guigこれはあなたが上にあった問題とは関係のない別の問題です。あなたはSOの別の質問としてそれを聞かせてもらえますか? – ozgur

+0

確かです。ここにあります:http://stackoverflow.com/questions/39221541/swift-dictionary-with-nil-value-to-json – Guig

関連する問題