Кодировать подкласс с помощью JSONEncoder - PullRequest
0 голосов
/ 05 июня 2018

Я сейчас сижу здесь над, как я сначала подумал, очень простой проблемой.Я хочу кодировать объект в Swift, который наследует другой класс .

Здесь классы:

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, а не на другом?

...