Swift Codable 解码为数组设定默认值

通过onevcat的《使用 Property Wrapper 为 Codable 解码设定默认值》文章内容我们可以为基础类型设定默认值。这里参照给出为数组设定默认值的方法:

@propertyWrapper
struct DefaultArray: 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(
        _ type: DefaultArray.Type,
        forKey key: Key
    ) throws -> DefaultArray  {
        try decodeIfPresent(type, forKey: key) ?? DefaultArray(wrappedValue: [E]())
    }
}

使用:

struct ExampleModel: Codable {
    @DefaultArray
    var hank: [String]
    @DefaultArray
    var zhy: [ZhyModel]
}

你可能感兴趣的:(Swift Codable 解码为数组设定默认值)