Swift Codable 中轻松处理易失败的可选枚举属性。
您可以通过将 EasyCodable 添加为包依赖项来将其添加到 Xcode 项目中。
https://github.com/sochalewski/EasyCodable
。考虑以下数据模型
struct Car: Codable {
enum Manufacturer: String, Codable {
case toyota, volkswagen, ford, honda, generalMotors
}
var manufacturer: Manufacturer?
var vin: String?
var owner: String?
}
如果接收到的 JSON 与可用的 Manufacturer
枚举值匹配,一切都完美运行,例如这样
{
"manufacturer": "toyota",
"vin": "JT4RN67S0G0002845",
"owner": null
}
但是 Car.manufacturer
是可选的,因此即使接收到的制造商与当前支持的制造商不匹配,拥有有效的模型也是有意义的
{
"manufacturer": "tesla",
"vin": "5YJSA2DP8DFP22249",
"owner": "Elon Musk"
}
不幸的是,使用 JSONDecoder
解码会导致整个 Car
得到 nil
,而不仅仅是 Car.manufacturer
。
这可以通过自定义 Decodable
协议的 init(from:)
来解决,但这需要大量的样板代码,尤其是在您的模型中有数十个枚举时。
这就是 EasyCodable 的用武之地!
只需将 @EasyNil
属性包装器添加到您的可选 RawRepresentable
属性即可。
struct Car: Codable, Equatable {
enum Manufacturer: String, Codable {
case toyota, volkswagen, ford, honda, generalMotors
}
@EasyNil var manufacturer: Manufacturer?
var vin: String?
var owner: String?
}
Piotr Sochalewski, sochalewski.github.io