Я использую Perfect Framework для разработки на стороне сервера и хочу использовать ту же модель для базы данных и для ответа / запроса JSON (мне нужно исключить / переименовать некоторые поля).
Идеально использовать кодируемый протокол и собственный декодер / кодировщик для БД.
Я попробовал решение ниже, но я не знаю, может быть, есть лучшее решение?
struct User: Codable {
let id: Int
var username: String
var password: String
var fullName: String
enum CodingKeys: String, CodingKey {
case id
case username
case password
case fullName = "full_name"
}
init(from decoder: Decoder) throws {
if let options = encoder.userInfo[CodingOptions.key] as? CodingOptions {
if options.source == "JSON"
return try self.decodeFromJson(decoder:decoder)
}
} else {
...decoder code here..
}
}
}
struct CodingOptions {
let source: String
static let key = CodingUserInfoKey(rawValue: "a")!
init(source: String) {
self.source = source
}
}
let options = CodingOptions(source: "JSON")
let decoder = JSONDecoder()
ecoder.userInfo = [CodingOptions.key : options]
let user = try decoder.decode(User.self, from: jsonData)