SwiftUI学习笔记CoreData使用

使用自带CoreData进行数据存储

1.创建新的SwiftUI工程,名字取为What to do,创建的时候在User Core Data前打勾☑️。
在这里插入图片描述
这样就在AppDelegate.swift中则自动添加了两个函数,用于处理coredata,不再需要手动添加了(What拼错了,懒得改了)。
在这里插入图片描述
2.找到WhatToDo.xcdataModeld文件,点击Add Entity,添加新的Entity,命名为"ToDoItem"。在Attribute中添加两个变量,needToDo 类型为String,ShowFlag 类型为Boolean。因为这个小程序只有很简单的添加内容以及完成与否显示功能,所以变量很少。
在这里插入图片描述
3.现在可以进入ContentView.swift编程首先定义coredata数据相关的内容,用于处理coredata
在这里插入图片描述
操作变量toDoItem即操作本工程中读取后的coredata,并按needToDo中字符串升序排列好的。
定义两个变量,对应ToDoItem中变量

@State private var thingsToDo = ""
@State private var showFinishedFlag = false

定义一个图片处理函数

//判断是否显示checkmark
func image(for state: Bool) -> Image {
        return state ? Image(systemName: "checkmark.circle") : Image(systemName: "circle")
    }

显示文本输入框,以及确认Button。当文本输入完成后,点击Button后存储到CoreData数据中。

HStack {
            TextField("待办?", text: $thingsToDo)
            Button(action: {
                let newThing = ToDoItem(context: 	self.managedObjectContext)
                newThing.needToDo = self.thingsToDo
                newThing.showFlag = false
                do
                {
                    try  self.managedObjectContext.save()
                }catch
                {
                    print(error)
                }
                
                self.thingsToDo = ""
            })
            {
                Text("✓")
                    .font(.headline)
            }
        }

模拟器显示
在这里插入图片描述
每次点击蓝色☑️的时候,存储CoreData数据,清除TextField中信息。

4.完善显示
加入List与Section将待输入内容与已经输入好的分开显示

List
            {
                //待输入
                Section(header: Text("写点啥"))
                {
                    HStack {
                        TextField("待办?", text: $thingsToDo)
                        Button(action: {
                            let newThing = ToDoItem(context: self.managedObjectContext)
                            newThing.needToDo = self.thingsToDo
                            newThing.showFlag = false
                            
                            do
                            {
                                try  self.managedObjectContext.save()
                            }catch
                            {
                                print(error)
                            }
                            
                            self.thingsToDo = ""
                            
                        })
                        {
                            Text("✓")
                                .font(.headline)
                        }
                    }
                }
                //显示已经输入完成的内容
                Section(header: Text("要做的事"))
                {
                    ForEach(toDoItems, id: \.self)
                    {
                        item in
                        
                        HStack {
                            self.image(for: item.showFlag).onTapGesture {
                                item.showFlag.toggle()
                                do
                                {
                                    try  self.managedObjectContext.save()
                                }catch
                                {
                                    print(error)
                                }
                            }
                          
                        }
                        
                    }
                
                    
                }
        }

模拟器在这里插入图片描述
基本完成。后续加入对已经录入内容修改页面,以及删除已录入内容。

猜你喜欢

转载自blog.csdn.net/jackwsd/article/details/107018416