2014-11-12 11 views
12

Używam xcode 6 i zaimportowałem libsqlite3.dylib i libsqlite3.0.dylib. Dodałem już także przywóz Bridging-Header.h plików witch sqlite3.hSQLITE_TRANSIENT niezdefiniowany w Swift

mogę otworzyć bazę danych SQLite i wykonywać proste operacje, takie jak wkładki wybrać ...

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

mam błąd: Use of unresolved identifier 'SQLITE_TRANSIENT'

Co mam zrobić? Jestem nowy w Swift, to moje pierwsze pytanie na Stack, pls, pomóżcie mi!

+0

pokazać trochę kodu podobnego jak importować sqlite3.h? –

+0

w moim Bridge-Header.h dodaję #import . Myślę, że to dlatego, że w moim sqlite3.h nie definiuje SQLITE_TRANSIENT i SQLITE_STATIC, ponieważ mogę używać innych stałych, takich jak SQLITE_OK, SQLITE_DONE. – Chongzl

+0

Błąd tak po prostu to mówi. –

Odpowiedz

15

Definicje

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

z <sqlite3.h> nie są importowane do Swift, prawdopodobnie ze względu na "niebezpieczne" odlewania wskaźnika.

Możliwym Swift definicję przedstawiono w projekcie SQLite.swift, w Statement.swift:

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

Dla Swift 2 trzeba

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

(zaczerpnięte z "Helpers.swift" z Swift 2 gałąź projektu SQLite.swift).

Aktualizacja Swift 3:

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

To zadziałało! Dziękuję Ci! – Chongzl

+0

fajna, szybka 3 wersja działa również w szybkim 4! – hasen