Во время моих бесполезных попыток декодировать этот простой файл JSON я всегда получал этот странный ответ, который я считаю из-за некоторых ошибок, которые я делаю в своем коде. Я хочу избавиться от этих ошибок в скобках и сохранить свой ответ в чистоте: * vk_with_server_response.
InitialPageViewController. (Неизвестный контекст в $ 105a03c18). (Неизвестный контекст в $ 105a03dd0) *
Полный ответ выглядит следующим образом:
Response(count: 32363, items: [vk_with_server_response.InitialPageViewController.(unknown context at $105a03c18).(unknown context at $105a03dd0).Inner(first_name: "Sonya", last_name: "Kargina"), vk_with_server_response.InitialPageViewController.(unknown context at $105a03c18).(unknown context at $105a03dd0).Inner(first_name: "Slava", last_name: "Kholod")])
Я новичок, так что, ребята, не вините меня много, я буду любить любые предложенияпроработай это. Также, если кто-то знает, как сделать то же самое, используя «класс». Я был бы рад взглянуть, потому что с классами у меня нет никакого ответа вообще.
struct Response: Decodable{
let count:Int
let items:[Inner]
enum CodingKeys: String,CodingKey{
case items
case count
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.count = try container.decode(Int.self, forKey: .count)
var innerItems = try container.nestedUnkeyedContainer(forKey: .items)
var arrayInner = [Inner]()
while !innerItems.isAtEnd{
let nestedItems = try innerItems.decode(Inner.self)
arrayInner += [nestedItems]
}
items = arrayInner
}
}
struct Inner: Decodable {
var first_name:String
var last_name:String
enum ListCodingKeys:String,CodingKey{
case first_name
case last_name
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: ListCodingKeys.self)
self.first_name = try container.decode(String.self, forKey: .first_name)
self.last_name = try container.decode(String.self, forKey: .last_name)
}
}
struct FirstLayerOfResponse: Decodable{
let response: Response
}
//-----------------------
var jsonTest = """
{
"response": {
"count": 32363,
"items": [{
"first_name": "Sonya",
"last_name": "Kargina"
}, {
"first_name": "Slava",
"last_name": "Kholod"
}]
}
}
""".data(using: .utf8)! // our data in native format
do{
let tryJS = try JSONDecoder().decode(FirstLayerOfResponse.self, from: jsonTest)
print(tryJS.response)
}catch {
print(error.localizedDescription)
}