当我从Codable类继承时,为什么Codable不起作用?

时间:2019-08-01 13:30:07

标签: json swift codable

我从Codable类继承,父类的属性被解码,而子类没有被解码。请检查下面的代码段。我需要了解如何以通用方式解决此问题。

import Foundation

class APIDataClass: Codable {
    var status: Int? = 0
}

class User1: APIDataClass {
    var name: String?
    var age = 32
}

let jsonData = Data("""
{
"name": "Amy",
"age": 20,
"status": 2
}
""".utf8)

let decoder = JSONDecoder()
let user1 = try! decoder.decode(User1.self, from: jsonData)

print("=====User1: APIDataClass=====")
print("name: \(user1.name ?? "unknown")") // Not decoded, WHY?
print("age: \(user1.age)") // Not decoded, WHY?
print("status: \(user1.status ?? -1)")  // Yes, decoded

class User2: Codable {
    var name: String?
    var age = 32
    var status: Int? = 0
}

let user2 = try! decoder.decode(User2.self, from: jsonData)

print("=====User2: Codable=====")
print("name: \(user2.name ?? "unknown")")
print("age: \(user2.age)")
print("status: \(user2.status ?? -1)")


/*
 Output:

 =====User1: APIDataClass=====
 name: unknown
 age: 32
 status: 2
 =====User2: Codable=====
 name: Amy
 age: 20
 status: 2
 Program ended with exit code: 0
 */

0 个答案:

没有答案