通过onevcat的《使用 Property Wrapper 为 Codable 解码设定默认值》文章内容我们可以为基础类型设定默认值。这里参照给出为数组设定默认值的方法:
@propertyWrapper
struct DefaultArray<Element: Codable>: Codable {
var wrappedValue: [Element]
}
extension DefaultArray {
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
wrappedValue = (try? container.decode([Element].self)) ?? [Element]()
}
}
extension KeyedDecodingContainer {
func decode<E>(
_ type: DefaultArray<E>.Type,
forKey key: Key
) throws -> DefaultArray<E> {
try decodeIfPresent(type, forKey: key) ?? DefaultArray(wrappedValue: [E]())
}
}
使用:
struct ExampleModel: Codable {
@DefaultArray
var hank: [String]
@DefaultArray
var zhy: [ZhyModel]
}