CoreData我们的SwiftUI开发提供基础数据支持,在之前的文章中我们介绍了数据实体的制作。
但是该如何读取数据呢?
实际上有五种不同的方式来获取获取请求。有些比其他的更受欢迎,但是作为SwiftUI开发人员,您可能会在某个时候遇到所有这些。下面就让我们来逐个了解一下吧
// 1
let fetchRequest1 = NSFetchRequest<Venue>()
let entity = NSEntityDescription.entity(forEntityName: "Venue", in: managedContext)!
fetchRequest1.entity = entity
// 2
let fetchRequest2 = NSFetchRequest<Venue>(entityName: "Venue")
// 3
let fetchRequest3: NSFetchRequest<Venue> = Venue.fetchRequest()
// 4
let fetchRequest4 = managedObjectModel.fetchRequestTemplate(forName: "venueFR")
// 5
let fetchRequest5 = managedObjectModel.fetchRequestFromTemplate(
withName: "venueFR",
substitutionVariables: ["NAME" : "Vivi Bubble Tea"])
方案一
let fetchRequest1 = NSFetchRequest<Venue>()
let entity = NSEntityDescription.entity(forEntityName: "Venue", in: managedContext)!
fetchRequest1.entity = entity
您将NSFetchRequest实例初始化为通用类型:NSFetchRequest 。至少必须为获取请求指定NSEntityDescription。在这种情况下,实体是Venue。您初始化NSEntityDescription的实例,并使用它来设置获取请求的实体属性
方案二
let fetchRequest2 = NSFetchRequest<Venue>(entityName: "Venue")
在这里,您可以使用NSFetchRequest的便捷初始化程序。它初始化一个新的获取请求,并一步设置其实体属性。您只需要提供一个用于实体名称的字符串,而不是一个完整的NSEntityDescription .
方案三
let fetchRequest3: NSFetchRequest<Venue> = 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教程与源码