📅  最后修改于: 2023-12-03 14:55:39.103000             🧑  作者: Mango
在Swift应用程序中,我们常常需要在应用中保存数据以便于在不同的场合下使用。这些数据可以是用户的个人信息,用户的偏好设置,以及应用程序中的其他相关数据。在本文中,我们将会介绍使用Swift来保存核心数据的两种方式,即使用UserDefaults和使用Core Data。
UserDefaults是一种简便快捷的保存核心数据的方式。它是一个键值对存储工具,可以用于存储基本的数据类型,例如字符串、整数、布尔型等等。
下面是存储数据的示例代码:
let defaults = UserDefaults.standard
defaults.set("John", forKey: "username")
defaults.set(25, forKey: "age")
defaults.set(true, forKey: "isLogin")
这里我们使用了UserDefaults的标准实例,并存储了一个字符串、一个整数和一个布尔值。
读取保存在UserDefaults中的数据很简单,只需要使用相应的get方法即可。示例如下:
let defaults = UserDefaults.standard
let username = defaults.string(forKey: "username")
let age = defaults.integer(forKey: "age")
let isLogin = defaults.bool(forKey: "isLogin")
在上述代码中,我们分别使用了string(forKey:)
、integer(forKey:)
和bool(forKey:)
等方法从UserDefaults中获取了保存的数据。
Core Data是一种更为复杂的保存核心数据的方式。它是一个基于对象图映射(Object Graph Mapping,OGM)的框架,可以保存和管理应用程序中的对象。由于Core Data可以很好地管理对象关系,并提供了强大的查询和数据过滤功能,因此在需要保存大量数据的情况下,我们通常会选择Core Data来实现。
在使用Core Data之前,我们需要先创建一个数据模型。我们可以使用Xcode的数据建模工具来创建数据模型。在创建数据模型之前,我们需要先打开Xcode左侧的导航栏,选择最上方的“Use tab-based template”选项。
在新建一个项目后,在右侧的文件夹结构中,找到“CoreDataDemo.xcdatamodeld”文件,这是我们的数据模型文件。双击打开这个文件,就可以进入数据建模工具了。
在我们创建好了数据模型后,就可以使用Core Data来存储和查询核心数据了。首先,我们需要创建一个Core Data堆栈,并创建一个数据上下文对象。
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "CoreDataDemo")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
lazy var context: NSManagedObjectContext = {
return persistentContainer.viewContext
}()
在上面的代码中,我们创建了一个持久化容器,并将模型名称设置为“CoreDataDemo”。然后我们使用loadPersistentStores(completionHandler:)
方法加载容器。最后我们还创建了一个上下文对象,用于管理Core Data中的对象。
接下来我们可以使用上下文对象来保存和查询数据了。存储数据的示例代码如下:
let entity = NSEntityDescription.entity(forEntityName: "Person", in: context)!
let person = NSManagedObject(entity: entity, insertInto: context)
person.setValue("John", forKey: "name")
person.setValue(25, forKey: "age")
do {
try context.save()
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
在这段代码中,我们通过NSEntityDescription.entity(forEntityName:in:)
方法获取到了Core Data中的实体“Person”。然后我们使用NSManagedObject(entity:insertInto:)
方法创建了一个人员对象,并对其属性进行了赋值。最后我们使用上下文对象的save()
方法将数据保存到Core Data中。
查询数据的示例代码如下:
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Person")
do {
let result = try context.fetch(fetchRequest)
for data in result as! [NSManagedObject] {
print(data.value(forKey: "name") as! String)
print(data.value(forKey: "age") as! Int)
}
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
在这段代码中,我们使用了NSFetchRequest(entityName:)
方法创建了一个查询请求。然后我们使用上下文对象的fetch(_:)
方法执行查询,并遍历返回的结果集。
以上就是使用Swift保存核心数据的两种方式,分别是使用UserDefaults和使用Core Data。这两种方式各有千秋,具体选择哪种方式,需要根据我们的实际需求来决定。无论选择哪种方式,我们都需要对我们要保存的数据进行充分的理解和分析,以便于选择最适合的数据保存方式。