2014-11-12 4 views
12

Ich benutze xcode 6 und ich habe libsqlite3.dylib und libsqlite3.0.dylib importiert. Außerdem habe ich die Bridging-Header.h Datei Hexe Importe sqlite3.hSQLITE_TRANSIENT undefined in Swift

I SQLite-Datenbank öffnen kann und tun einfache Operationen wie Einsatz wählen ...

Mit if (sqlite3_bind_text(compiledStatement, 2, Name.cStringUsingEncoding(NSUTF8StringEncoding), -1, SQLITE_TRANSIENT) != SQLITE_OK)

Ich habe einen Fehler: Use of unresolved identifier 'SQLITE_TRANSIENT'

Was zeige ich? Ich bin neu in Swift, es ist meine erste Frage zu Stack, bitte helft mir jemand!

+0

zeigen einige Code wie, wie Sie sqlite3.h importieren? –

+0

in meinem Bridging-Header.h Ich füge #import hinzu. Ich denke es ist, weil es in meinem sqlite3.h SQLITE_TRANSIENT und SQLITE_STATIC nicht definiert, weil ich andere Konstanten wie SQLITE_OK, SQLITE_DONE verwenden kann. – Chongzl

+0

ja Fehler sagt das einfach. –

Antwort

15

Die Definitionen

#define SQLITE_STATIC  ((sqlite3_destructor_type)0) 
#define SQLITE_TRANSIENT ((sqlite3_destructor_type)-1) 

von <sqlite3.h> sind nicht auf Swift importiert, wahrscheinlich aufgrund der "unsicheren" Zeiger Guss.

let SQLITE_STATIC = sqlite3_destructor_type(COpaquePointer(bitPattern: 0)) 
let SQLITE_TRANSIENT = sqlite3_destructor_type(COpaquePointer(bitPattern: -1)) 

Für Swift 2 Sie (von "Helpers.swift" vom Swift 2 genommen werden müssen

let SQLITE_STATIC = unsafeBitCast(0, sqlite3_destructor_type.self) 
let SQLITE_TRANSIENT = unsafeBitCast(-1, sqlite3_destructor_type.self) 

:

Eine mögliche Swift-Definition wird in Statement.swift im SQLite.swift Projekt gezeigt Zweig des SQLite.swift-Projekts).

Update für Swift 3:

let SQLITE_STATIC = unsafeBitCast(0, to: sqlite3_destructor_type.self) 
let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self) 
+0

Es hat funktioniert! Vielen Dank! – Chongzl

+0

cool, die swift 3 version funktioniert auch in swift 4! – hasen