📅  最后修改于: 2023-12-03 15:40:42.762000             🧑  作者: Mango
Realmswift 是使用 Swift 语言操作本地数据库的一个强大的第三方库,但实际上也有很多其他的库能够实现同样的功能。下面介绍了一些与 Realmswift 类似的模块。
CoreData 是苹果官方提供的本地数据库解决方案,用于存储和管理应用程序的持久化数据对象。和 Realmswift 一样,它支持对象图形映射,但是它使用的是 SQLLite 数据库,而不是 Realm 使用的 C++ 核心库。CoreData 能更好地处理一些复杂数据模型,但其学习曲线较陡峭。
CoreData 的安装需要在 Xcode 中新建一个 CoreData Funnel,安装后可以通过关联模型简单地操作数据,具体操作方式可以参考官方文档。
// 插入数据 示例
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "User", in: context)!
let user = NSManagedObject(entity: entity, insertInto: context)
user.setValue("John", forKeyPath: "name")
do {
try context.save()
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
FMDB 是一个 SQLite 的封装库,它将许多常见的操作,例如查询、更新、删除、以及事务包装在简单的 API 中。它没有 Realmswift 的对象图形映射,但是在涉及复杂查询时性能非常优秀。
// 插入数据 示例
let query = "INSERT INTO User(name, age) VALUES (?, ?)"
let args: [Any] = ["Tom", 25]
if !db.open() {
print("Unable to open database")
return
}
if !db.execute(query, withArgumentsIn: args) {
print("Failed")
}
db.close()
YapDatabase 是一个用于 iOS 和 macOS 的顶级数据库,基于 SQLite,并添加了诸如全文搜索、键值观察、多组事务等高级特性。很多人认为它是一个档案性能极高的替代品。
// 插入数据 示例
let collection = "users"
database.newConnection { (transaction) -> Void in
transaction.setObject(["name": "Alice"], forKey: "1", inCollection: collection)
}
尽管 Realmswift 有其自身的优点,但在处理复杂数据需要深入操作数据库时不一定始终是最优的解决方案。我们可以根据具体情况选择合适的数据库框架,以实现我们所需的功能。上述三个库都具备了一定程度的性能和灵活性,因此选择进行更深入调查的话,可以有这样几个方向:1)StorageKit; 2)GRDB;3)MySQLite;4)SQLite.swift 等等。