CoreData 在 swift UI 中的使用
>
>
当谈到在 Swift UI 中进行本地数据持久化,Core Data 是一个强大且常用的解决方案。Core Data 是苹果提供的一种数据存储和管理框架,用于在应用程序中创建、读取、更新和删除数据。它提供了一个对象图管理器,可以将数据映射到对象,并提供了一种简化数据操作的方式。在本文中,我们将深入介绍 Core Data 在 Swift UI 中的使用。
Core Data 简介
Core Data 是一个基于对象图管理的框架,它允许你将数据模型映射到 Swift 类,并提供了一种高级抽象,用于处理数据的创建、存储和检索。它支持多种数据存储后端,包括 SQLite、In-Memory 和二进制文件。使用 Core Data 可以有效地管理应用程序的数据,减少手动数据管理的复杂性。
创建 Core Data 模型
在使用 Core Data 之前,首先需要创建一个数据模型。这个模型定义了你的数据结构,包括实体(Entity)、属性(Attribute)和关系(Relationship)。你可以使用 Xcode 中的数据模型编辑器来创建和设计模型,然后生成相应的 Swift 类。
首先创建模型(这里的模型就类似于数据库,我是做后端的,所以会有这个比喻。如果对后端不熟悉的可以忽略),这里我们命名为 Reader,创建完之后,如下图所示:
我们点击 Add Entity 按钮来创建 Entity(这里可以类似于数据库中的表)这里我们创建了 Book 的Entity, 给 Entity 命名之后,开始给Entity 定义属性,在下图的 Attribute 点击加号来添加属性:
定义完成之后,我们来生成对应的实体类
按照上述的操作完成后,就得到了这样的swift 文件
import Foundation import CoreData public class Book: NSManagedObject { } import Foundation import CoreData extension Book { @nonobjc public class func fetchRequest() -> NSFetchRequest<Book> { return NSFetchRequest<Book>(entityName: "Book") } @NSManaged public var bookId: UUID? @NSManaged public var bookName: String? @NSManaged public var createTime: Date? } extension Book : Identifiable { }
下面我们来介绍如何在代码中使用创建的 Entity ,并进行 CURD 操作
初始化 Core Data 堆栈
//DataSource.swift import Foundation import CoreData public class DataSource : ObservableObject{ let container = NSPersistentContainer(name: "Reader"); init() { container.loadPersistentStores { description, error in print("description is ===> \(description)") if let error = error { fatalError("Unable to load persistent stores: \(error)") } } } } //ReaderApp.swift @main struct Reader_Watch_AppApp: App { @StateObject private var datasource = DataSource(); var body: some Scene { WindowGroup { ContentView() .environment(\.managedObjectContext, datasource.container.viewContext) } } }
检索数据
import SwiftUI struct BookList: View { // var bookList : [String] = ["盗墓笔记", "21 天精通 JAVA", "C++ 从入门到精通", "金瓶梅", "三体"]; @Environment(\.managedObjectContext) private var viewContext; @FetchRequest( sortDescriptors: [NSSortDescriptor(keyPath: \Book.createTime, ascending: true)], animation: .default ) private var bookList: FetchedResults<Book> var body: some View { List(bookList, id: \.self){ book in let bookName = book.bookName!; NavigationLink(destination: BookContent(book: Book1(bookName))) { Text(bookName) } } .navigationTitle { HStack{ Text("书架").foregroundColor(.orange) Spacer() } } } }
更新和删除数据
if let item = items.first { item.name = "Updated Name" do { try viewContext.save() } catch { // 处理错误 } } if let itemToDelete = items.first { viewContext.delete(itemToDelete) do { try viewContext.save() } catch { // 处理错误 } } //项目中代码 List(bookList, id: \.self){ book in let bookName = book.bookName!; NavigationLink(destination: BookContent(book: Book1(bookName))) { Text(bookName) }.swipeActions(edge: .trailing, allowsFullSwipe: false) { Button(action: { if let bookToDelete = bookList.first(where: { $0 == book}) { viewContext.delete(bookToDelete) do { try viewContext.save() } catch { // 处理错误 } } }) { Text("删除") // .foregroundColor(.white) // .padding() // .background(Color.red) } } } .navigationTitle { HStack{ Text("书架").foregroundColor(.orange) Spacer() } } }
Core Data 是一个强大的数据管理框架,可以在 Swift UI 中轻松实现本地数据持久化。通过创建数据模型、初始化 Core Data 堆栈、使用上下文进行数据操作,以及在视图中展示数据,可以构建出自己的应用程序。