gpt4 book ai didi

arrays - Swift 3 - 将数组中的字典从 JSON 传递给另一种方法

转载 作者:行者123 更新时间:2023-11-28 08:26:14 25 4
gpt4 key购买 nike

我有以下 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
}
}

我在上面的函数中遍历数组时遇到了一些问题。最初,我曾尝试过:

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

但我是 swift 的新手,在 NSArray、Array、Dictionary、NSDictionary 等之间破译时遇到问题。我正在使用 Swift 3。非常感谢任何帮助!

最佳答案

首先,不要过多地注释类型。编译器会告诉你是否需要显式注解

其次,为 JSON 字典声明类型别名很方便

typealias JSONObject = [String:Any]

这就是任务,tmpRawData 是一个字典 – 由 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 中根本不需要它。

关于arrays - Swift 3 - 将数组中的字典从 JSON 传递给另一种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39898699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com