3

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 宣言も初期化が必要なため、グローバルに設定することはできません。クラス内の他のメソッドからこのオブジェクトにアクセスするにはどうすればよいですか?

4

3 に答える 3

6

あなたはこれを行うことができます:

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

エラーケースを処理するために、クロージャーで好きなことをすることができます。

于 2015-11-30T15:25:42.077 に答える