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

通过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]
}

发表评论

邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据