-1

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をデコードできますか?

4

2 に答える 2

1

ageinClassAはオプションでないと宣言されているため、キーが必要ですが、JSONageInfoは空です。

エラーは

キー CodingKeys(stringValue: "age") に値が関連付けられていません

ageオプションとして宣言するか

var age: Int?

またはJSONにキーと値のペアを挿入します

{
    "ageInfo": {"age" : 1},
    "name": "Jack"
}
于 2018-07-07T07:04:39.990 に答える
1

あなたのクラスBにはこれがあります:

var ageInfo: ClassA?

しかし、それは次の JSON では役に立ちません。

"ageInfo": {}

問題はageInfo存在することですが、空の辞書でもあります。したがって、ClassA はあります、ClassA の定義に対応していません。

変化する

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

class ClassA: Codable {
    var age: Int? = 1
}
于 2018-07-07T07:05:10.600 に答える