@cs2023 cs2023 / Oxydol.swift
Created at Wed Nov 29 14:14:23 JST 2023
OxydolをCodableに
Oxydol.swift
Raw
import SwiftUI

class Oxydol : Codable {
    var name: String
    var kind: String
    var formula: String
    var images: [String]

    enum CodingKeys: String, CodingKey {
        case name, kind, formula, images
    }
    
    init() {
        self.name = "oxydol"
        self.kind = "物質"
        self.formula = "H2O2"
        self.images = ["oxydol"]
    }
    
    required convenience init(from decoder: Decoder) throws {
        self.init()
        let values = try decoder.container(keyedBy: CodingKeys.self)
        self.name = try values.decode(String.self, forKey: .name)
        self.kind = try values.decode(String.self, forKey: .kind)
        self.formula = try values.decode(String.self, forKey: .formula)
        self.images = try values.decode([String].self, forKey: .images)
    }
    func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encode(name, forKey: .name)
        try container.encode(kind, forKey: .kind)
        try container.encode(formula, forKey: .formula)
        try container.encode(images, forKey: .images)
    }
}


let encoder = JSONEncoder()
let value = Oxydol()
if let data = try? encoder.encode(value),
   let str = String(data:data, encoding:.utf8) {
    print(str)
}
print("------")
let data = "{\"kind\":\"物質2\",\"name\":\"oxydol2\",\"images\":[\"oxydol\",\"oxydol2\"],\"formula\":\"H2O2\"}".data(using:.utf8)!
let decoder = JSONDecoder()
if let dvalue = try? decoder.decode(Oxydol.self, from:data) {
    print("name=  \(dvalue.name)")
    print("kind=  \(dvalue.kind)")
    print("formula=  \(dvalue.formula)")
    print("images[1]= \(dvalue.images[1])")
}