20. Realm 数据库
目标:模型清晰、事务正确、查询可维护。
一、安装(SPM)
https://github.com/realm/realm-swift
二、模型定义
import RealmSwift
class Post: Object {
@Persisted(primaryKey: true) var id: Int
@Persisted var title: String = ""
@Persisted var createdAt: Date = Date()
}
三、写入数据
let realm = try! Realm()
let post = Post()
post.id = 1
post.title = "Realm 入门"
try! realm.write {
realm.add(post, update: .modified)
}
四、查询与排序
let posts = realm.objects(Post.self)
.filter("title CONTAINS[c] %@", "Realm")
.sorted(byKeyPath: "createdAt", ascending: false)
五、删除
if let first = posts.first {
try! realm.write {
realm.delete(first)
}
}
六、线程限制
Realm 对象不能跨线程直接传递,需要 ThreadSafeReference。
let ref = ThreadSafeReference(to: post)
DispatchQueue.global().async {
let realm = try! Realm()
if let resolved = realm.resolve(ref) {
print(resolved.title)
}
}
Realm 的关键点是“写入必须在事务中、对象不可跨线程直接使用”。