在 iOS 应用中使用 Realm 数据库

17 Mar 2025 | 6 分钟阅读

我们已经使用 SQLite 和 CoreData 在 iOS 应用程序中持久化数据。Realm 是 Apple 的 CoreData 的替代方案。 它比 CoreData 和 SQLite 更快更容易使用。 在我们利用 Realm 的云功能之前,它可以免费无限使用。 在本教程中,我们将创建一个新的 iOS 项目来使用 Realm 存储数据。 我们将讨论带有数据库的基本 CRUD(创建、读取、更新、删除)操作。

什么是 Realm

Realm 是一个数据库,旨在针对适用于 iOSAndroid 的移动应用程序。 它比 iOS 应用程序的 SQLite 和 CoreData 更好、更快。 它更易于使用,并且需要更少的代码来存储和检索数据。 它可以免费用于 iOS 和 Android 应用程序,没有任何限制。 Realm 是移动数据库的替代方案,因为目前,除了 SQLite 或任何在 SQLite 之上运行的包装器(例如 CoreData)之外,我们没有太多选择。 它主要设计为易于使用,因为它不是一个 ORM,因为它使用其持久化引擎来提供速度和性能。

为什么使用 Realm

Realm 在速度方面优于其他移动数据库。 它更易于使用,并且还需要更少的代码来检索和存储数据。 在本教程的这一部分中,我们将讨论 Realm 数据库的优缺点。

  1. 易于安装: 在 iOS 中,在应用程序中安装 Realm 非常简单。 我们可以通过使用 Cocoapods 轻松地在 iOS 应用程序中安装 Realm。
  2. 比其他数据库运行更快: 在 Realm 中保存、检索或执行任何数据库操作更快。 Realm 在 iOS 应用程序中比 SQLite 和 CoreData 运行更快。
  3. 跨平台:Realm 数据库是跨平台的,因此可以轻松地在 iOS 和 android 上运行,而与我们使用的技术无关。
  4. 可扩展性: 在开发处理大量用户及其记录的应用程序时,考虑数据库的可扩展性非常重要。 我们可以使用 Realm 在更短的时间内处理大量数据。 我们还将在应用程序中使用 Realm 时获得速度和平滑度。
  5. 良好的文档和支持: Realm 团队提供了关于在我们的应用程序中安装和使用 Realm 数据库的丰富文档。
  6. 免费:Realm 免费提供所有已提供的优势。

概念概述

为了理解 Realm 数据库的正常运行,我们需要了解本教程中将要使用的类。

  • Realm:Realm 实例是该框架的基本构建块。 它充当对底层数据库的访问点,就像 Core Data 托管对象上下文一样。 可以使用 Realm() 初始化程序创建实例。
  • 对象:这是 Realm 模型。 我们需要创建模型来定义数据库模式。 要创建模型,我们需要对 Object 进行子类化并定义我们要作为属性持久化的字段。
  • 关系:我们可以通过声明 Object 类型属性来创建对象之间的一对多关系,我们要引用该属性。 我们可以通过 List 类型的属性创建多对一和多对多关系。
  • 写事务:数据库中的任何操作,如创建、编辑或删除对象,都必须在通过调用 Realm 实例上的 write(_:) 的 writes 中执行。
  • 查询:要从数据库中检索对象,请使用查询。 查询的最简单形式是在 Realm 实例上调用 objects() 并传入要查找的对象的类。 如果您的数据检索需求更复杂,您可以使用谓词、链接您的查询并对结果进行排序。
  • 结果:结果是一种自动更新的容器类型,您从对象查询中获得。 它们与常规数组有很多相似之处,包括下标语法。

开始

首先,我们需要创建一个新的 XCode 项目。 创建一个带有 swift 的单视图 iOS 应用程序,如下所示。

Using Realm database in iOS app

在本教程中,要将 Realm 数据库添加到我们的项目中,我们将使用 Cocoapods。 为此,打开终端,导航到项目目录,然后运行以下命令。

它将在项目目录中生成 Podfile;我们需要打开它并将 pod 添加以下载 Realm。

Podfile 将包含以下代码。

现在,在终端中运行以下命令以安装 pod。

安装完 Realm 的 pod 后,我们需要关闭所有 XCode 实例并打开 .xcworkspace 文件。

使用 Realm 数据库进行数据持久化

首先,我们需要创建一个对象以在 Realm 中使用。 为此,添加一个带有以下代码的 swift 文件 Employee.swift。

现在,我们需要从 Realm 保存和检索员工。 让我们创建一个类作为 EmployeeDAO 并将以下代码写入其中。

在 EmployeeDAO 中,我们将 Realm 数据库创建为类成员。 现在,我们需要添加方法来保存和检索 Employee 类型的对象。

这里,Realm.write 启动一个写事务。 写入事务可能失败,因此我们需要将其标记为抛出。 现在我们需要查看检索对象的代码。

让我们添加一个方法来在 Employees 数据库中添加一个新员工。 我们将把这个方法放在 EmployeeDAO 类中。 将以下代码添加到 EmployeeDAO 类中。

现在,我们将尝试在 ViewController 类中保存和检索员工。 为此,请在 ViewController 中添加以下代码。

输出

它在 XCode 控制台中打印检索到的员工。

Results <0x7f9aca60e5b0> (
[0] Employee {
age = 24;
id = 1001;
name = john;
}
)

现在,让我们尝试从数据库中删除对象。 为此,在 EmployeeDAO 类中添加以下方法。

为了测试删除方法实现,让我们在数据库中添加一个名为 Mike 的新员工,删除它,然后检索名为 Mike 的员工。 为此,让我们在 ViewController 的 saveAndGetEmployees 方法中添加以下代码。

这将在控制台中打印以下输出。

Results <0x7fc1c1f6d040> (
[0] Employee {
age = 30;
id = 1002;
name = Mike;
}
)
Results <0x7fc1c1c11bb0> (


)

现在,我们的 ViewController 将包含以下代码。

我们的 EmployeeDAO 类将包含以下代码。