我有一个结构,该结构以用户默认值保存为属性列表。如果结构更改(也许在应用程序版本更新之后),则PropertyListDecoder().decode
会为找不到密钥生成错误。例如,我已将键“ passwordProtect”添加到我的结构中。当应用从用户默认设置获取存储的结构并尝试对其进行解码时,它会显示错误Swift.DecodingError.keyNotFound(CodingKeys(stringValue: "passwordProtect", intValue: nil)
在这种情况下,我想要的行为是由于未设置passwordProtect
,因此我想解码为我的结构,但使用passwordProtect
的默认值。我已经在我的结构中声明了变量的默认值。如何获得这种行为?
我的结构:
struct Settings: Codable {
var showTimeOutMessage: Bool = false
var browserLimit: Bool = false
var browserLimitSeconds: Int = 300
var passwordProtect: Bool = false
var metaTime: TimeInterval?
init(fromDict : [String : Any?]?){...}
}
我如何保存它:
var settingsStruct = Settings(fromDict: formatedDict)
settingsStruct.metaTime = Date().timeIntervalSince1970
defaults.set(try? PropertyListEncoder().encode(settingsStruct), forKey:"settings")
我如何找回它:
if let settingsData = defaults.value(forKey:"settings") as? Data {
let settingsStruct = try! PropertyListDecoder().decode(Settings.self, from: settingsData)
dump(settingsStruct)
}
谢谢!