#json #dictionary #decodable
#json #словарь #декодируемый
Вопрос:
Я пытаюсь использовать Decodable
for Dictionaries
в JSON
данных, но я получаю эти ошибки: 1) Тип ‘Customer’ не соответствует протоколу ‘Decodable’ и 2) Использование необъявленного типа ‘Address’. Любая помощь была бы отличной.
struct Customer : Decodable {
var firstName : String
var lastName : String
var address : Address
}
struct CustomersResponse : Decodable {
var customers : [Customer]
}
let json = """
{
"customers":[
{
"firstName" : "Henry",
"lastName" : "Collins",
"address" : {
"street" : "1200 Highland Ave",
"city" : "Houston",
"state" : "TX",
"geo" : {
"latitude" : 29.76,
"longitude" : -95.36
}
}
}
]
}
""".data(using: .utf8)!
let customersResponse = try!
JSONDecoder().decode(CustomersResponse.self, from: json)
print(customersResponse)
Ответ №1:
address
И geo
Dictionaries
считаются вложенными объектами. Вы получаете ошибку «Декодируемый»типа ‘Customer’ не соответствует протоколу из-за использования необъявленного типа ‘Address’ ошибки. Итак, сначала вам нужно устранить эту вторую ошибку, объявив Address
тип. Но тогда вы также получите две новые ошибки, если вы не объявите Geo
. Добавьте следующий код в начало вашего проекта, чтобы устранить любые ошибки и создать правильный вывод.
struct Geo : Decodable {
var latitude : Double
var longitude : Double
}
struct Address : Decodable {
var street : String
var city : String
var state : String
var geo : Geo
}