// *** before: ***
// every type turned itself into a dictionary and back by hand
struct UserOld {
let name: String
let age: Int
init?(json: [String: Any]) {
guard let name = json["name"] as? String,
let age = json["age"] as? Int else { return nil }
self.name = name
self.age = age
}
var json: [String: Any] { return ["name": name, "age": age] }
}
let raw = try JSONSerialization.jsonObject(with: data) as? [String: Any]
let userOld = raw.flatMap(UserOld.init(json:))
// *** in version 4.0: ***
struct User: Codable {
let name: String
let age: Int
}
let data = try JSONEncoder().encode(User(name: "Alina", age: 25))
let user = try JSONDecoder().decode(User.self, from: data)
print(user.name)
// other names in the json are described once
struct Post: Codable {
let title: String
let createdAt: Date
enum CodingKeys: String, CodingKey {
case title
case createdAt = "created_at"
}
}