さまよえる、Android

Androidのプログラミングで便利なことや残しておきたいことを残しておく。もしオススメのライブラリがあったら教えてくださいね。

Codableでクラス継承対応

import UIKit

var data = """
{
    "A": "A",
    "B": "B",
    "C": "C",
}
"""

class A : Codable {
    
    var A:String = "A"
    
    enum CodingKeys: String, CodingKey {
        case A = "A"
    }
    
    func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encode(A, forKey: .A)
    }
}

class B: A {
    
    var B:String = "B"

    enum CodingKeys: String, CodingKey {
        case B = "B"
        case A = "A"
    }
    
    override func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encode(B, forKey: .B)
        try container.encode(A, forKey: .A)
    }
}

var b = B()
b.A = "やべい"
b.B = "すごい"

var enc = try! JSONEncoder().encode(b)
print(String(data: enc, encoding: .utf8)!)


var a = A()
a.A = "どすこい"

var enc1 = try! JSONEncoder().encode(a)
print(String(data: enc1, encoding: .utf8)!)