什么是 Realm,为什么需要它?
Realm 是一个移动数据库,作为 Core Data 和 SQLite 的替代方案而创建。与传统的关联数据库不同,Realm 作为面向对象的存储运行:您使用原生的 Swift 对象,而不是 SQL 查询或 NSManagedObject。Realm 以自有格式存储数据,从而提供接近内存运行的速度。
Realm 的主要优势:
- 速度:在移动设备上,Realm 比 SQLite 快 10-100 倍。
- 简单性:您使用普通的 Swift 对象,通过继承 Realm.Object 来实现。
- 自动更新:查询结果 (Results) 在数据更改时自动更新。
- 实时对象:Realm 对象自动与数据库同步。
- 跨平台:Realm 可在 iOS、macOS、tvOS 和 watchOS 上运行。
Realm 非常适合需要在设备上快速访问数据的应用程序:待办事项列表、即时通讯工具、网络数据缓存、笔记应用等。
在 Swift 中安装 Realm
Swift 的 Realm 可通过 Swift Package Manager (SPM)、CocoaPods 或 Carthage 安装。我们来看两种最流行的方法。
通过 Swift Package Manager 安装(推荐)
- 在 Xcode 中打开项目:
File → Add Packages... - 粘贴 URL:
https://github.com/realm/realm-swift.git - 选择版本(推荐最新的稳定版)并点击
Add Package。 - 在出现的窗口中,为您的目标构建选择
Realm和RealmSwift包。
通过 CocoaPods 安装
在 Podfile 中添加:
target 'YourApp' do use_frameworks! pod 'RealmSwift'end然后在终端中执行:
pod install在代码中导入
import RealmSwift快速入门:第一个模型与数据写入
让我们创建一个简单的任务模型并将其保存到数据库。
import RealmSwift
// 1. 定义模型class Task: Object { @Persisted var id: String = UUID().uuidString @Persisted var title: String = "" @Persisted var isCompleted: Bool = false @Persisted var createdAt: Date = Date() // 主键(可选,但推荐) override static func primaryKey() -> String? { return "id" }}
// 2. 保存对象let task = Task()task.title = "购买食品"task.isCompleted = false
let realm = try! Realm()try! realm.write { realm.add(task)}
// 3. 读取所有任务let tasks = realm.objects(Task.self)for task in tasks { print("\\(task.title) - \\(task.isCompleted ? "已完成" : "未完成")")}Realm 的主要方法与函数
以下是使用 Realm 的关键方法。每个方法都附有描述、参数和工作示例。
1. Realm() — 初始化数据库
功能:创建或打开现有的 Realm 数据库。默认情况下,数据库文件位于应用程序的 Documents 目录中。
参数:configuration: Realm.Configuration? — 可选配置(文件 URL、模式、迁移版本)。
// 标准初始化let realm = try! Realm()
// 使用自定义 URL 初始化let config = Realm.Configuration(fileURL: FileManager.default .urls(for: .documentDirectory, in: .userDomainMask) .first?.appendingPathComponent("myrealm.realm"))let customRealm = try! Realm(configuration: config)