0

我最近更新到 Xcode 7.0 并尝试构建使用 SQLite.swift 库的项目。在转换为最新的 Swift 语法(Edit->Convert->To Latest Swift Syntax...)后,我遇到了很多错误,我不知道从哪里开始修复它们。我还尝试单独转换 SQLite.swift 项目,但在编译时总是会收到很多警告和一些错误,例如:

/Users/dobrev/Development/iOS/SQLite.swift/SQLite/Statement.swift:25:30: error: cannot invoke initializer for type 'sqlite3_destructor_type' with an argument list of type '(COpaquePointer)'
internal let SQLITE_STATIC = sqlite3_destructor_type(COpaquePointer(bitPattern: 0))
                             ^
/Users/dobrev/Development/iOS/SQLite.swift/SQLite/Statement.swift:26:33: error: cannot invoke initializer for type 'sqlite3_destructor_type' with an argument list of type '(COpaquePointer)'
internal let SQLITE_TRANSIENT = sqlite3_destructor_type(COpaquePointer(bitPattern: -1))

最终导致Command failed due to signal: Segmentation fault 11

有人可以帮忙吗?

4

1 回答 1

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

from<sqlite3.h>没有被导入到 Swift,可能是由于“不安全”的指针转换。

SQLite.swift 项目的 Statement.swift 中显示了一个可能的 Swift 定义:

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

对于 Swift 2,您将需要

let SQLITE_STATIC = unsafeBitCast(0, sqlite3_destructor_type.self)
let SQLITE_TRANSIENT = unsafeBitCast(-1, sqlite3_destructor_type.self)
于 2016-05-09T03:19:51.353 回答