当前位置 : 主页 > 手机开发 > ios >

ios – 如何在Swift中全局声明数据库连接变量

来源:互联网 收集:自由互联 发布时间:2021-06-11
我需要初始化一个变量以连接到 Swift中的SQLite数据库.我正在使用 SQLite.swift库,需要使用以下行连接到数据库: let db = try Connection("path/to/db.sqlite3") 但是,这一行本身不起作用,因为它需要用
我需要初始化一个变量以连接到 Swift中的SQLite数据库.我正在使用 SQLite.swift库,需要使用以下行连接到数据库:

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

但是,这一行本身不起作用,因为它需要用try / catch块包围.除非在方法或函数中定义了try / catch块,否则它们将无法工作,所以现在我们有了

public func connectToDB() {
    do {
        let path = NSSearchPathForDirectoriesInDomains(
            .DocumentDirectory, .UserDomainMask, true
            ).first!
        let db = try Connection("\(path)/db.sqlite3")
    }
    catch {
        print("error connecting to database")
    }
}

但是,这不允许我从同一文件中的其他方法访问变量,这是我需要做的.全局let声明也需要初始化,这意味着它不能全局设置.如何从类中的其他方法访问此对象?

你可以这样做:

let db = try! Connection("path/to/db.sqlite3")
// db is a Connection but the app dies if there was an error.

或者你可以这样做:

let db = try? Connection("path/to/db.sqlite3")
// db is an Optional<Connection> and nil if there was an error.

或者你可以这样做:

let db = { () -> Connection in
    do {
        return try Connection("path/to/db.sqlite3")
    } catch {
        do {
            return try Connection() // transient in-memory database
        } catch {
            fatalError()
        }
    }
}() // invoke this closure immediately

您可以在闭包中执行任何您喜欢的操作来处理错误情况.

网友评论