Hello friends.
I tried write the below line on swift 3:
let text = UnsafePointer<Int8>(sqlite3_column_text(statement, index))
But I have this error:
'init' is unavailable: use 'withMemoryRebound(to:capacity:_)' to temporarily view memory as another layout-compatible type.
I thinh that Tthis error is about UnsafePointer<Int8>
How cain I fix it?
This is fallout from SE-0107 UnsafeRawPointer API, which puts Swift’s type aliasing rules on a firm footing. I recommend you read the UnsafeRawPointer Migration doc before going further here.
You wrote:
I think that this error is about
UnsafePointer<Int8>
Right. Swift 3 no longer lets you construct pointers of type A from pointers of type B, and in this case
sqlite3_column_text
returns a pointer to type
UInt8
.
There are a bunch of ways to fix this but the best approach depends on what you’re doing with the returned value. For example, if your final goạl is to get a Swift string, you can avoid the whole issue by using string initialisation function that takes an
UnsafePointer<UInt8>
.
let text = sqlite3_column_text(statement, index)
// `text` is of type `UnsafePointer<UInt8>`
if let text = text {
let str = String(cString: text)
…
} else {
… handle the fact that text is nil …
}
Share and Enjoy
—
Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware
let myEmail = "eskimo" + "1" + "@apple.com"