Ключ дескриптора PropertyListDecoder не найден - PullRequest
0 голосов
/ 18 марта 2019

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

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...