2016-09-07 17 views
3

Swiftでネストされた辞書を作成しようとしていますので、後でJSONに変更できます。場所値は、ネストされた辞書ことになっているネストされた辞書スウィフト中括弧?

["price": 15.69, "location": { 
    address = "12350 Carmel MT Road"; 
    city = "City"; 
    state = CA; 
    store = "Store name"; 
    zip = 12345; 
}, "item": item, "date": , "time": ] 

:私はこれを実行すると、出力がこれです

let item: [String: AnyObject] = [ 
     "item": item, 
     "price": price, 
     "date": date, 
     "time": time, 
     "location": [ 
      "store": "Store name", 
      "address": "1234 Untitled Dr.", 
      "city": "City", 
      "state": "CA", 
      "zip": "12345" 
     ] 
     ] 
print(item) 

を:私はこのようにそれを設定しています。場所の部分を囲む中括弧があるのはなぜですか?そして、引用符があるかどうかで値が矛盾するのはなぜですか?私がアクセスしようとすると、さらに、:

print(items["location"]!["store"]) 

IはIを聞いています:

は `型の値を添字できない[[文字列:ANYOBJECT]]」タイプの インデックスを持つ '文字列'

+0

辞書は構造体です。あなたは[String:Any]と思う必要があります。 – Knight0fDragon

+0

'[[String:AnyObject]]は辞書の配列なので、添字にすることはできません。 – WMios

+0

印刷を試してみてください: '' 'print '(item [" location "] as?[String:AnyObject])?[" store "])' '' – mbuff24

答えて

4

短い答え
使用[String: Any]の代わり[String: AnyObject]

長い答え:
事は財団が自動的にココアにスウィフトコアタイプの橋渡しです。これはAnyObject制約のためSwift DictionaryNSDictionaryに自動的にブリッジされていると言われており、Swift構造体はAnyObjectにキャストできず、Dictionaryは構造体です。

printは、NSDictionaryの場合、中括弧で囲まれたdescriptionプロパティを呼び出します。

AnyObjectの代わりにAnyを指定すると、スウィフトは角括弧descriptionを持つDictionaryに変数型を設定します。

P.S.
subscriptについては、配列があると思いますので、items[0]["location"]!["store"]のようなものを使用してください。

+0

意味があります!また、P.S.のおかげで、私はそれを完全に忘れてしまった。私のアレイをより良く名づけたはずです。 –