在调用 swift 中读取 blob 数据额外参数字节

read blob data extra argument bytes in call swift

我正在尝试从 sqlite 读取 blob 数据,但出现 Extra argument 'bytes' in call 错误。

这是我的代码:

var len = sqlite3_column_bytes(compiledStatement, 0)
var point = sqlite3_column_blob(compiledStatement, 0)
var dbData:NSData? = NSData(bytes: point, length: len)// ERROR: Extra argument 'bytes' in call

if dbData != nil
{
   arrDataRow.addObject(dbData!)
}

sqlite3_column_bytes return 一个 Int32,但是 NSData(bytes:, length: ) 期望 Int 作为第二个参数, 因此您必须显式转换该值:

let dbData = NSData(bytes: point, length: Int(len))

另请注意,此 NSData 初始化程序 而不是 return 一个可选的, 所以将它分配给 var dbData:NSData? 没有多大意义, 即使那样 dbData 也永远不会是 nil.

你能做什么 是检查是否 sqlite3_column_blob() returned nil or not:

let len = sqlite3_column_bytes(compiledStatement, 0)
let point = sqlite3_column_blob(compiledStatement, 0)
if point != nil {
    let dbData = NSData(bytes: point, length: Int(len))
    // ...
}

在 Swift 4.2

if let dataBlob = sqlite3_column_blob(albumQueryPointer, 0){
    let dataBlobLength = sqlite3_column_bytes(albumQueryPointer, 0)
    let data = Data(bytes: dataBlob, count: Int(dataBlobLength))
}