swift - Swift Codable:不同的编码/编码策略
问题描述
我使用 Perfect 框架进行服务器端开发,我想对数据库和 JSON 响应/请求使用相同的模型(我需要排除/重命名某些字段)。完美使用 Codable 协议和自己的 DB 解码器/编码器。我尝试了下面的解决方案,但我不知道,也许有更好的解决方案?
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)
解决方案
推荐阅读
- swift - 在 SwiftUI 中使用 TabView 时,第一个选项卡栏按钮出现两次
- r - 绘制表格和连接它们的箭头
- python - 在 python 中使用来自 matplotlib 的内存中的 BytesIO() 流编写多页 pdf 报告
- flutter - pubspec.yaml 文件中的前导“+”是什么意思?
- c# - 如何在控制台应用程序 .NET Core (C#) 中创建打开文件对话框?
- file - Perl:散列变量的组合
- python - eval 的安全替代方案?
- java - 使用高停止条件 10000 时如何修复 StackOverflowError
- javascript - ReactJS:输入失去对文本更改的关注 - DOM 被重新渲染
- azure - 滚动浏览许多 Azure Key Vault 机密