审查生成的 JSON 设置包装器

来自 属性包装器
Swift 6.3.3 高级 6分钟 找出 4处问题

根据任务审查这个生成的属性包装器。

持久化 Codable 设置,不泄露秘密;区分缺失与损坏数据;编码失败时保留最后的有效值;未变化的重复读取不反复解码。

swift
import Foundation
@propertyWrapper
struct JSONSetting<Value: Codable> {
    let key: String
    let defaultValue: Value

    var wrappedValue: Value {
        get {
            guard let data = UserDefaults.standard.data(forKey: key) else { return defaultValue }
            return (try? JSONDecoder().decode(Value.self, from: data)) ?? defaultValue
        }
        set {
            let data = try? JSONEncoder().encode(newValue)
            print("saving \(key): \(newValue)")
            UserDefaults.standard.set(data, forKey: key)
        }
    }

    init(wrappedValue: Value, _ key: String) {
        self.key = key
        self.defaultValue = wrappedValue
    }
}

生成代码仅作示例,不代表任何特定模型

在试验场中打开
报告错误