使用 Codable 或 userDefaults 保存列表

瑞奇·切特里

有人可以帮助我使用 Codable 或其他方法将列表保存在此代码中。我无法在代码中使用 UserDefaults。任何人都可以帮助我如何使用保存列表,以便当我重新打开我的应用程序时,列表仍然存在。谢谢。

import SwiftUI
struct MainView: View {

    @State var br = Double()
    @State var loadpay = Double()
    @State var gp : Double = 0
    @State var count: Int = 1
    @State var listcheck = Bool()
    @StateObject var taskStore = TaskStore()
 @State var name = String()
    var userCasual = UserDefaults.standard.value(forKey: "userCasual") as? String ?? ""
    func addNewToDo() {
         taskStore.tasks.append(Task(id: String(taskStore.tasks.count + 1), toDoItem:  "load \(count)", amount: Double(gp)))
   }
    func stepcount() {
       
     count += 1
        
    }
    var body: some View {
        VStack {
            TextField("Name", text: $name)
            HStack {
            Button(action: { gp += loadpay }) {
                Text("Add Load")
            }
            Button(action: {
                addNewToDo()
            }) {
                Text("Check")
            }
        }
            Form {
                ForEach(self.taskStore.tasks) {
                    task in
                    Text(task.toDoItem)
                }
            }
        }
        Button(action: {
            UserDefaults.standard.set(name, forKey: "userCasual")})
        {Text("Save")}

}

}
struct Task : Identifiable {
    var id = String()
    var toDoItem = String()
    var amount : Double = 0
}

class TaskStore : ObservableObject {
    @Published var tasks = [Task]()
}
瓦店

Task采用Codable

struct Task : Codable, Identifiable {
    var id = ""
    var toDoItem = ""
    var amount = 0.0
}

TaskStore添加两个方法来加载保存任务和一个init方法

class TaskStore : ObservableObject {
    @Published var tasks = [Task]()
    
    init() {
        load()
    }
    
    func load() {
        guard let data = UserDefaults.standard.data(forKey: "tasks"),
              let savedTasks = try? JSONDecoder().decode([Task].self, from: data) else { tasks = []; return }
        tasks = savedTasks
    }
    
    func save() {
        do {
            let data = try JSONEncoder().encode(tasks)
            UserDefaults.standard.set(data, forKey: "tasks")
        } catch {
            print(error)
        }
    }
}

在视图调用taskStore.save()中保存数据。

然而:对于大型数据集UserDefaults是错误的地方。将数据保存在 Documents 文件夹中或使用 Core Data。

旁注:永远不要使用value(forKey:)in UserDefaults,在你的例子中有string(forKey:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将符合Codable协议的枚举保存到UserDefaults?

使用 userDefaults 保存 UIViews

如何使用UserDefaults保存UIColor?

如何使用静态自实例在 UserDefaults 中保存模型类?

使用UserDefaults保存和检索布尔值

使用UserDefaults在Swift中保存自定义对象的字典

使用Swift将可编码的结构保存到UserDefaults

SwiftUI:如何使用UserDefaults保存选择器数据?

如何使用UserDefaults保存和加载我的结构?

尝试使用NSKeyedArchiver在UserDefaults中保存自定义对象

使用结构ID将收藏夹保存到UserDefaults

使用 Codable 保存到 CoreData 字符串数组

如何将列表类型与Codable结合使用?(RealmSwift)

如何使用 Codable 解析不同对象列表的 Json 数组?

从UserDefaults保存/获取UIColor

CoreData + Codable无法保存

使用 UserDefaults 的最佳方法

使用@字符的UserDefaults崩溃

在viewWillAppear中使用UserDefaults

将字典保存到UserDefaults

将结构保存到UserDefaults

使用NSCoding将自定义Swift类保存到UserDefaults

使用SwiftUI将TextField中的字符串保存在UserDefaults中

如何将枚举案例值保存到UserDefaults中以进一步使用

如何在SwiftUI中使用UserDefaults保存选择器数据?

如何使用UserDefaults快速将高分保存到游戏中?

如何在iOS 12.0中的UserDefaults中保存对象数组。使用任何数组[[String:Any]]

通过 UIButton 使用自定义 TableViewCell 添加到收藏夹并保存到 UserDefaults

使用SwiftUI从UserDefaults中的1个以上TextField中保存字符串