在Swift中调用时读取Blob数据的额外参数字节

4
我将尝试读取sqlite中的blob数据,但是我收到了“在调用中有额外参数'bytes'”的错误信息。
这是我的代码:
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!)
}
2个回答

8

sqlite3_column_bytes 返回一个 Int32,但是 NSData(bytes:, length: ) 的第二个参数需要一个 Int,因此你需要显式地将该值转换:

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

请注意这个NSData的初始化器并不会返回一个可选类型,所以将其分配给var dbData:NSData?没有太多意义,即使这样,dbData也永远不会是nil。 你可以做的是检查sqlite3_column_blob()是否返回了nil
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))
    // ...
}

3
最初的回答:在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))
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接