У меня есть структура, которая сохраняется в пользовательских настройках по умолчанию в виде списка свойств. Если структура изменяется (возможно, после обновления версии приложения), 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)
}
Спасибо!