2016-10-06 5 views
1

私は、次のJSONがありますスウィフト3 - アレイ内の峠辞書JSONから別の方法に

{ 
    "stores":2, 
    "store_data":[ 
     { 
     "store_id":1, 
     "store_name":"Target" 
     "store_color":"000000" 
     }, 
     { 
     "store_id":2, 
     "store_name":"Walmart" 
     "store_color":"FFFFFF" 
     } 
    ] 
} 

そして、私は(関数内)以下の方法(単純化のために削除セーフガード)、それを集めています:

をヘルパープロセス機能に送る
let task = URLSession.shared.dataTask(with: baseURL) { (data, response, error) in 
    if let tmpRawData: NSDictionary = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary { 
     process(rawData: tmpRawData) 
    } 
} 

とは、次のように定義される。

func process(rawData: NSDictionary) -> Bool { 
    if let storeDataArray = rawData["store_data"] { 
     // Here I want to loop through the store_data array 
    } 
} 

そして私はHAVI上記の関数で配列をループするいくつかの問題。

for store: Dictionary<String, String> in storeDataArray { 
    // Do things with store["store_id"] here 
} 

をしかし、私は迅速に新しいですし、私はすべてのヘルプははるかに高く評価されスウィフト3で働いているトラブル解読NSArrayの間、配列、辞書、NSDictionaryの、などを持っています:最初は、私がしようとしました!

答えて

0

まず、それほど多くの種類の注釈を付けないでください。で{}で表さ - コンパイラはtmpRawDataが辞書で、これはタスクであるJSON辞書のために、それが明示的な注釈を必要とする場合、すべての

第二には、タイプの別名を宣言すると便利です

typealias JSONObject = [String:Any] 

を教えますJSON

let task = URLSession.shared.dataTask(with: baseURL) { (data, response, error) in 
    if let tmpRawData = try JSONSerialization.jsonObject(with: data, options: []) as! JSONObject { 
    process(rawData: tmpRawData) 
    } 
} 

およびprocessの機能では、タイプエイリアスによってすべてが読みやすくなります。
rawDataの値は、JSONの[]で表される辞書の配列です。

func process(rawData: JSONObject) -> Bool { 
    if let storeDataArray = rawData["store_data"] as? [JSONObject] { 
    for store in storeDataArray { 
     let storeID = store["store_id"] as! Int 
     let storeName = store["store_name"] as! String 
     let storeColor = store["store_color"] as! String 
    print(storeID, storeName, storeColor) 
    } 
    } 
} 

すべてのチュートリアルでなぜmutableContainersオプションが示唆されているのかわかりません。ネイティブコレクションタイプを使用している場合、Swiftではこれはまったく必要ありません。

+0

これは私が必要としていたものでした。私はあまりにも明白であると思った...ありがとう! –

関連する問題