📜  核心数据保存 - Swift (1)

📅  最后修改于: 2023-12-03 14:55:39.103000             🧑  作者: Mango

核心数据保存 - Swift

在Swift应用程序中,我们常常需要在应用中保存数据以便于在不同的场合下使用。这些数据可以是用户的个人信息,用户的偏好设置,以及应用程序中的其他相关数据。在本文中,我们将会介绍使用Swift来保存核心数据的两种方式,即使用UserDefaults和使用Core Data。

UserDefaults

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

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。这两种方式各有千秋,具体选择哪种方式,需要根据我们的实际需求来决定。无论选择哪种方式,我们都需要对我们要保存的数据进行充分的理解和分析,以便于选择最适合的数据保存方式。