Почему # Codable # не работает в приведенном ниже коде? - PullRequest
0 голосов
/ 06 июля 2018

У меня есть код ниже для проверки Codable протокола и JSONDecoder.

import UIKit

class ClassA: Codable {
    var age: Int = 1
}

class ClassB: Codable {
    var ageInfo: ClassA?
    var name: String
}

let json4 = """
{
    "ageInfo": {},
    "name": "Jack"
}
""".data(using: .utf8)!

do {
    let d = try JSONDecoder().decode(ClassB.self, from: json4)
} catch let err {
    print(err)
}

Мой вопрос, почему json4 не может быть декодирован? или как мне расшифровать json4 ?

Ответы [ 2 ]

0 голосов
/ 07 июля 2018

Ваш ClassB имеет это:

var ageInfo: ClassA?

Но это не поможет вам с этим JSON:

"ageInfo": {}

Проблема в том, что ageInfo есть присутствует , но это также пустой словарь. Таким образом, является ClassA, но это не соответствует вашему определению ClassA!

Изменение

class ClassA: Codable {
    var age: Int = 1
}

до

class ClassA: Codable {
    var age: Int? = 1
}
0 голосов
/ 07 июля 2018

age в ClassA объявлен необязательным, поэтому ключ требуется, однако в JSON ageInfo пусто.

Ошибка

Нет значения, связанного с ключом CodingKeys (stringValue: "age")

Либо объявить age необязательным

var age: Int?

или вставьте пару ключ-значение в JSON

{
    "ageInfo": {"age" : 1},
    "name": "Jack"
}
...