Сохранение и извлечение структуры, которая не кодируется пользовательскими ошибками в Swift - PullRequest
0 голосов
/ 22 мая 2019

Я хочу сохранить структуру, которую нельзя изменить до UserDefaults в моем коде. Я прошел через несколько решений, но все советуют использовать Codable/NSCoding в struct . Я не могу редактировать структуру. У кого-нибудь есть идеи, как этого добиться?

Я пытался обернуть объект в NSDictionary, но при попытке сохранить он выдает сообщение « Попытка вставить объект списка, не относящийся к свойствам ». Это потому, что в моей модели есть нулевые значения?

Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 22 мая 2019

Если вы не можете изменить struct, то создайте для него extension и установите для него Codable.

После соответствия Codable вы можете использовать JSONEncoder иJSONDecoder для преобразования в и из данных, а затем сохранения / извлечения из UserDefaults.

struct Sample {
    var name = "Sample Struct"
}

extension Sample: Codable {

}

let obj = Sample()
let data = try? JSONEncoder().encode(obj)

//Saving in UserDefaults
UserDefaults.standard.set(data, forKey: "SampleStruct")

//Fetching from UserDefaults
if let data = UserDefaults.standard.data(forKey: "SampleStruct") {
    let val = try? JSONDecoder().decode(Sample.self, from: data)
    print(val) //Sample(name: "Sample Struct")
}
0 голосов
/ 22 мая 2019

Я пытался обернуть объект в NSDictionary

Вы не можете сохранить пользовательскую модель без соответствия Codable/NSCoding, если вам не нужно соответствовать, сохраните ее как обычный Array/Dictionary без упаковки каких-либо пользовательских объектов внутри

...