在哪里使用 SwiftUI 为用户初始化 sqlite 数据库?
Where to initialize sqlite database for a user with SwiftUI?
我有这个初始化数据库的函数(基本上是从SQLite.swift的documentation复制过来的)。
func createDB() {
let paths = FileManager.default.urls(for: FileManager.SearchPathDirectory.documentDirectory, in: FileManager.SearchPathDomainMask.userDomainMask)
let documentsDirectory = paths[0]
print(documentsDirectory)
do {
// creates new if it doesnt exist
let db = try Connection("\(documentsDirectory)/dbtest.sqlite3")
} catch {
print(error)
}
}
现在我只是把它放在 @main
结构中。
@main
struct MyApp: App {
...
createDB()
}
在 SwiftUI 世界中,您将如何创建一个我可以在整个会话(用户打开应用程序)中使用的全局数据库对象?或者在这里创建它可以吗?
有各种好的/坏的/丑陋的处理方法,在主结构中创建数据库可能被认为是一种不好的方法。
更好的方法是将所有 sqlite 代码包装在您自己的一个实现中。例如,检查 Wrapping the Database Connection section in this tutorial
同样本着不写“仅link”答案的精神,下面是同一部分的摘录
class SQLiteDatabase {
private let dbPointer: OpaquePointer?
private init(dbPointer: OpaquePointer?) {
self.dbPointer = dbPointer
}
deinit {
sqlite3_close(dbPointer)
}
}
我有这个初始化数据库的函数(基本上是从SQLite.swift的documentation复制过来的)。
func createDB() {
let paths = FileManager.default.urls(for: FileManager.SearchPathDirectory.documentDirectory, in: FileManager.SearchPathDomainMask.userDomainMask)
let documentsDirectory = paths[0]
print(documentsDirectory)
do {
// creates new if it doesnt exist
let db = try Connection("\(documentsDirectory)/dbtest.sqlite3")
} catch {
print(error)
}
}
现在我只是把它放在 @main
结构中。
@main
struct MyApp: App {
...
createDB()
}
在 SwiftUI 世界中,您将如何创建一个我可以在整个会话(用户打开应用程序)中使用的全局数据库对象?或者在这里创建它可以吗?
有各种好的/坏的/丑陋的处理方法,在主结构中创建数据库可能被认为是一种不好的方法。
更好的方法是将所有 sqlite 代码包装在您自己的一个实现中。例如,检查 Wrapping the Database Connection section in this tutorial
同样本着不写“仅link”答案的精神,下面是同一部分的摘录
class SQLiteDatabase {
private let dbPointer: OpaquePointer?
private init(dbPointer: OpaquePointer?) {
self.dbPointer = dbPointer
}
deinit {
sqlite3_close(dbPointer)
}
}