Swift: неизвестный контекст в ответе декодирования JSON в swift из вложенного массива - PullRequest
0 голосов
/ 10 октября 2019

Во время моих бесполезных попыток декодировать этот простой файл 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)
                }
...