Эта строка:
questions = [try container.decode(Question.self, forKey: .questions)]
неверно. Чтобы получить массив Question
, вам необходимо декодировать тип массива [Question].self
:
questions = try container.decode([Question].self, forKey: .questions)
Также обратите внимание, что Decodable
/ Encodable
работает с JSONDecoder
/ JSONEncoder
, см. официальные документы . В соответствии с этим, вот что вам нужно сохранить (закодировать в данные, а затем сохранить):
let jsonEncoder = JSONEncoder()
if let value = try? jsonEncoder.encode(userEntry) {
UserDefaults.standard.set(value, forKey: "allEntries")
}
И наоборот - получить данные и, если это так, попытаться декодировать объект:
let jsonDecoder = JSONDecoder()
if let data = UserDefaults.standard.data(forKey: "allEntries"),
let userEntry = try? jsonDecoder.decode(UserEntries.self, from: data) {
// here you get userEntry
}
* * Пример тысяча двадцать-один: * * 1 022
let userEntry = UserEntries(date: "1 Sep 18",
questions: [
UserEntries.Question(question: "q1Text", answer: "q1Answer"),
UserEntries.Question(question: "q2Text", answer: "q2Answer")
])
let jsonEncoder = JSONEncoder()
if let value = try? jsonEncoder.encode(userEntry) {
UserDefaults.standard.set(value, forKey: "allEntries")
}
let jsonDecoder = JSONDecoder()
if let data = UserDefaults.standard.data(forKey: "allEntries"),
let userEntry = try? jsonDecoder.decode(UserEntries.self, from: data) {
print(userEntry.date) // 1 Sep 18
}