SwiftUI数据之CoreData的五种获取数据的方式

CoreData我们的SwiftUI开发提供基础数据支持,在之前的文章中我们介绍了数据实体的制作。

  • SwiftUI数据存储之做个笔记App 新增与查询(CoreData)
  • SwiftUI进阶之存储用户状态实现登录与登出

但是该如何读取数据呢?
实际上有五种不同的方式来获取获取请求。有些比其他的更受欢迎,但是作为SwiftUI开发人员,您可能会在某个时候遇到所有这些。下面就让我们来逐个了解一下吧

// 1
let fetchRequest1 = NSFetchRequest()
let entity = NSEntityDescription.entity(forEntityName: "Venue", in: managedContext)!
fetchRequest1.entity = entity
// 2
let fetchRequest2 = NSFetchRequest(entityName: "Venue")
// 3
let fetchRequest3: NSFetchRequest = Venue.fetchRequest()
// 4
let fetchRequest4 = managedObjectModel.fetchRequestTemplate(forName: "venueFR")
// 5
let fetchRequest5 = managedObjectModel.fetchRequestFromTemplate(
    withName: "venueFR",
    substitutionVariables: ["NAME" : "Vivi Bubble Tea"])

方案一

let fetchRequest1 = NSFetchRequest()
let entity = NSEntityDescription.entity(forEntityName: "Venue", in: managedContext)!
fetchRequest1.entity = entity

您将NSFetchRequest实例初始化为通用类型:NSFetchRequest 。至少必须为获取请求指定NSEntityDescription。在这种情况下,实体是Venue。您初始化NSEntityDescription的实例,并使用它来设置获取请求的实体属性

方案二

let fetchRequest2 = NSFetchRequest(entityName: "Venue")

在这里,您可以使用NSFetchRequest的便捷初始化程序。它初始化一个新的获取请求,并一步设置其实体属性。您只需要提供一个用于实体名称的字符串,而不是一个完整的NSEntityDescription .

方案三

let fetchRequest3: NSFetchRequest = Venue.fetchRequest()

正如第二个示例是第一个示例的收缩一样,第三个示例是第二个示例的收缩。当您生成NSManagedObject子类时,此步骤还将生成一个类方法,该方法返回已设置为获取对应实体类型的NSFetchRequest。这就是Venue.fetchRequest()的来源。该代码位于Venue + CoreDataProperties.swift中

方案四

let fetchRequest4 = managedObjectModel.fetchRequestTemplate(forName: "venueFR")

在第四个示例中,您从NSManagedObjectModel检索获取请求。您可以在Xcode的数据模型编辑器中配置和存储常用的提取请求。

方案五

let fetchRequest5 = managedObjectModel.fetchRequestFromTemplate(
    withName: "venueFR",
    substitutionVariables: ["NAME" : "Vivi Bubble Tea"])

最后一种情况类似于第四种情况。从托管对象模型检索提取请求,但是这一次,您传入了一些额外的变量。这些“替代”变量用于谓词中,以优化您获取的结果。

技术交流

QQ:3365059189
SwiftUI技术交流QQ群:518696470

  • 请关注我的专栏icloudend, SwiftUI教程与源码

https://www.jianshu.com/c/7b3e3b671970

你可能感兴趣的:(SwiftUI数据之CoreData的五种获取数据的方式)