В didSet
из tasks
array
вы можете просто установить текущие элементы массива в UserDefaults
.
struct Task: Codable {
let taskName: String
let isCompleted: Bool
}
var tasks = [Task]() {
didSet {
let data = try? JSONEncoder().encode(tasks)
UserDefaults.standard.set(data, forKey: "ToDoDataKey")
}
}
func addItem(itemName: String, isCompleted: Bool = false) {
tasks.append(Task(taskName: itemName, isCompleted: isCompleted))
}
Это обеспечит, что данные в UserDefaults
синхронизируется с текущим в памяти.
И извлекает данные только в viewDidLoad()
, где данные будут загружены в первый раз.
func fetchTasks() -> [Task] {
if let data = UserDefaults.standard.data(forKey: "ToDoDataKey"), let tasks = try? JSONDecoder().decode([Task].self, from: data) {
return tasks
}
return []
}
Вызов fetchTasks()
в viewDidLoad()
.