指向const char参数指针的Swift指针



当与Swift的C api(SQLite 3 C api)交互时,我需要传递一个指向const char指针的指针作为out参数:

sqlite3_prepare_v2(
// snip other parameters
const char **pzTail // OUT parameter
);

翻译成Swift为:

sqlite3_prepare_v2(
// snip other parameters
UnsafeMutablePointer<UnsafePointer<Int8>>
)

这个out参数希望最终可以作为字符串使用。您可以很容易地将Swift String传递给const char *,但我不知道如何从双向间接寻址中获得可用的东西。

有人能在这里放光吗?

我玩这个玩得很开心。在之前,我没有接触过任何C-Swift的东西

以下是我在操场上取得的成就。希望它能帮助你:)

编辑:我制作了一个更好的纯swift版本

// Function to convert your type - UnsafeMutablePointer<UnsafePointer<Int8>>
func stringFromYourType(cStringPointer: UnsafeMutablePointer<UnsafePointer<Int8>>) -> String? {
    guard let string = String.fromCString(cStringPointer.memory) else { return nil }
    return string
}
// Create your type
let swiftString = "I'm a swift string"
var pointer = swiftString.nulTerminatedUTF8.withUnsafeBufferPointer { UnsafePointer<Int8>($0.baseAddress) }
// Convert it back
var newSwiftString = stringFromYourType(&pointer) // &pointer is equivalent to (char **)

最新更新