首页 > 解决方案 > 在哪里为使用 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 对象(用户打开应用程序)?或者在这里创建它好吗?

标签: iosswiftuisqlite.swift

解决方案


有各种好/坏/丑陋的方法来处理这个问题,在主结构中创建数据库可能被认为是一种不好的方法。

更好的方法是将所有 sqlite 代码包装在您自己的实现中。例如,检查本教程中的包装数据库连接部分

同样本着不写“仅链接”答案的精神,下面是同一部分的片段

class SQLiteDatabase {
    private let dbPointer: OpaquePointer?
    private init(dbPointer: OpaquePointer?) {
        self.dbPointer = dbPointer
    }
    deinit {
      sqlite3_close(dbPointer)
    }
}

推荐阅读