根据任务审查这个生成的属性包装器。
持久化 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
}
}
生成代码仅作示例,不代表任何特定模型