import UIKit
protocol Json : Codable {
func json(key: String) -> String!
var json:String! { get }
}
extension Json {
func json(key: String) -> String! {
let encoder = JSONEncoder()
encoder.dateEncodingStrategy = .iso8601
encoder.outputFormatting = .prettyPrinted
guard let data = try? encoder.encode([key : self]) else {
return nil
}
return String(data: data, encoding: .utf8)!
}
}
extension Json {
var json: String! {
let encoder = JSONEncoder()
encoder.dateEncodingStrategy = .iso8601
encoder.outputFormatting = .prettyPrinted
guard let data = try? encoder.encode(self) else {
return nil
}
return String(data: data, encoding: .utf8)!
}
}
struct User: Json {
let name: String
let age: Int
}
struct Admin: Json {
let user: User
let permission: Int
}
let user = User(name: "田中", age: 9)
let admin = Admin(user: user, permission: 5)
print(admin.json(key: "top") ?? "失敗")
print(admin.json ?? "top")