SQLite.swift(版本0.11.2)示例代码不起作用

时间:2017-01-04 13:13:53

标签: ios swift sqlite.swift

我正在尝试使用SQLite.swift示例代码但是它会抛出错误。

我所做的第一步是使用cocoapods安装它并且它成功了。然后我尝试在我的app委托中测试它,我声明导入SQLite,我在didFinishLaunchingWithOptions中添加了以下代码,但它显示错误。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    let db = try Connection("path/to/db.sqlite3")

    let users = Table("users")
    let id = Expression<Int64>("id")
    let name = Expression<String?>("name")
    let email = Expression<String>("email")

    try db.run(users.create { t in
        t.column(id, primaryKey: true)
        t.column(name)
        t.column(email, unique: true)
    })

    return true
}

我从这个代码行得到的错误(让db = try Connection(“path / to / db.sqlite3”))是“从这里抛出的错误未被处理”

有没有人遇到同样的问题?我正在使用XCode 8.2.1和Swift 3.0。

2 个答案:

答案 0 :(得分:0)

当发生运行时错误时,您的应用需要知道它应该做什么。您缺少的是函数声明中的do/catch子句或throws关键字。有关详细信息,请查看chapter "Error Handling" of the the Swift book

答案 1 :(得分:0)

感谢@ martin-r的解决方案。这是更新的代码。 解决方案:

do {
        let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]

        let db = try Connection("\(documentsPath)/db.sqlite3")

        let users = Table("users")
        let id = Expression<Int64>("id")
        let name = Expression<String?>("name")
        let email = Expression<String>("email")

        try db.run(users.create { t in
            t.column(id, primaryKey: true)
            t.column(name)
            t.column(email, unique: true)
        })

    } catch {
        // Handle error
    }