首页 > 解决方案 > 使用 JSONEncoder 编码子类

问题描述

我现在坐在这里,正如我最初想到的那样,非常简单的问题。我想在 Swift 中编码一个对象,它继承另一个 Class

这里的类:

class NetworkMessage: Codable {
    var version:Int?
}

class AddPlayerRequest: NetworkMessage {

    var playerName: String?
    var playerHashedPw: String?

    private enum CodingKeys: String, CodingKey {
        case playerName
        case playerHashedPw
    }

    override func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encode(playerName, forKey: .playerName)
        try container.encode(playerHashedPw, forKey: .playerHashedPw)

        try super.encode(to: encoder)
    }

}

我知道有数以百万计的示例,我会说我确信我做了示例中的所有操作,但似乎我错过了一些东西,因为当我尝试AddPlayerRequest像这样编码时:

let apr = AddPlayerRequest()
apr.playerName = "Test"
apr.playerHashedPw = "hynt87t7t76yt=="
apr.version = 1

do {
    let encoder = JSONEncoder()
    encoder.outputFormatting = .prettyPrinted
    let data = try encoder.encode(apr)
    let jsonStr = String(data: data, encoding: .utf8)
} catch {
    print(error)
}

输出是:

{

}

编辑:似乎相同的代码正在另一个 MAC 上运行。任何人都知道为什么代码可能在一个 MAC 上运行,但不能在另一个 MAC 上运行?

标签: jsonswiftinheritanceencoding

解决方案


推荐阅读