Skip to content

Instantly share code, notes, and snippets.

@omochi
Last active November 5, 2018 10:53
Show Gist options
  • Save omochi/0cef1eda13e900ab79be18a08771493f to your computer and use it in GitHub Desktop.
Save omochi/0cef1eda13e900ab79be18a08771493f to your computer and use it in GitHub Desktop.
import Foundation
struct C : Codable {
var name: String
var age: Int
}
struct D : Codable {
var power: Float
var size: Float
}
// 一つの手
struct C2A : Decodable {
var c: C
var d: D
init(from decoder: Decoder) throws {
self.c = try C(from: decoder)
self.d = try D(from: decoder)
}
}
// 更にもう一手
struct C2B : Decodable {
var name: String
var age: Int
var power: Float
var size: Float
init(from decoder: Decoder) throws {
let c2 = try C2A(from: decoder)
self.name = c2.c.name
self.age = c2.c.age
self.power = c2.d.power
self.size = c2.d.size
}
}
let json = """
{
"name": "aa",
"age": 3,
"power": 0,
"size": 1
}
"""
let decoder = JSONDecoder()
let x = try decoder.decode(C2B.self, from: json.data(using: .utf8)!)
dump(x)
/*
▿ CommandLineSandbox.C2B
- name: "aa"
- age: 3
- power: 0.0
- size: 1.0
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment