ios - 在哪里为使用 SwiftUI 的用户初始化 sqlite 数据库?
问题描述
我有这个初始化数据库的函数(基本上是从SQLite.swift的文档中复制的)。
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 世界中,您将如何创建一个我可以在整个会话期间使用的全局 DB 对象(用户打开应用程序)?或者在这里创建它好吗?
解决方案
有各种好/坏/丑陋的方法来处理这个问题,在主结构中创建数据库可能被认为是一种不好的方法。
更好的方法是将所有 sqlite 代码包装在您自己的实现中。例如,检查本教程中的包装数据库连接部分
同样本着不写“仅链接”答案的精神,下面是同一部分的片段
class SQLiteDatabase {
private let dbPointer: OpaquePointer?
private init(dbPointer: OpaquePointer?) {
self.dbPointer = dbPointer
}
deinit {
sqlite3_close(dbPointer)
}
}
推荐阅读
- c - 在 Amiga 和 68881 上使用 gcc 2.7.0 的浮点乘法错误 - 任何修复/解决方法?
- c - 如何在sketchup中获取组的材质?
- visual-studio - VS2008 上的 TFS 未连接到 dev.azure.com
- google-sheets - 如何在代码中使用 REGEXMATCH、SUM 和 ARRAYFORMULA
- javascript - 在 WKUIDelegate SwiftUI 上实现 Javascript 警报和确认?
- java - SimpleDateFormat(不是 TimeZone)支持解析哪些时区缩写?
- aws-codepipeline - 配置的 TestType 选项无效,应该是有效的 TestType。与 AWS DeviceFarm 和 AWS Code 管道集成
- typescript - 具有嵌套类型化返回对象的 ES6 打字稿实现方法不起作用。预期财产或签名
- python - 如何确保数组在tensorflow python中具有合适的softmax层尺寸
- javascript - jQuery if condition for multiple .val dropdown values