我有一个来自服务器的JSON ...
{
"cars": [
{
"name": "Ferrari",
"price": "100"
},
{
"name": "Lamborghini",
"price": "200"
},
{
"name": "Ford Pinto",
"price": "1"
}
]
}
这个JSON是一个名为cars
的字典,其中包含一个汽车数组,对吗?
然后我有这个结构...
struct Cars: Codable {
let cars: [Car]
}
struct Car: Codable, Hashable, Identifiable {
let id = UUID()
let name: String
let price: String
}
我使用以下代码对JSON进行解码:
let (data, _) = try await urlSession.data(from: url)
let result = try JSONDecoder().decode(Cars.self, from: data)
let listOfCars = result.cars
这是我不明白的事情。
在result.cars
中,cars
是result
的属性,在结构Cars
中声明为数组。不是字典。
我希望使用result["cars"]
访问它。
为什么会这样呢?
2条答案
按热度按时间4si2a6ki1#
在您的代码中...
result
是StructCars
的一个示例。您的设置代码已经告诉Swift如何将JSON字典转换为您自己的Struct。因此,
result
内部的所有内容都可以像下面这样访问...唯一的区别是创建方法不同,我们使用JSON解码将一些JSON解码为自定义类型,而不是像这样使用init方法。
rdrgkggo2#
正如注解和答案中所述,它根据解码策略获取结果类型。在您的代码
result type is Cars
中不是dictionary
。因此,您可以使用result.cars
访问属性如果你想用字典来代替,你需要像这样解码
现在您可以像使用字典一样访问它们