找不到PropertyListDecoder句柄键

时间:2019-03-18 16:22:26

标签: swift struct key codable property-list

我有一个结构,该结构以用户默认值保存为属性列表。如果结构更改(也许在应用程序版本更新之后),则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)
}

谢谢!

0 个答案:

没有答案