Swift 指向常量字符参数指针的快速指针

Swift 指向常量字符参数指针的快速指针,swift,pointers,out-parameters,Swift,Pointers,Out Parameters,当与来自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<UnsafePoint

当与来自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>>
)
sqlite3\u prepare\u v2(
//剪切其他参数
非女性化指针
)
此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 **)
//用于转换类型的函数-UnsafeMutablePointer
func stringFromYourType(cStringPointer:UnsafeMutablePointer)->字符串?{
guard let string=string.fromCString(cStringPointer.memory)else{return nil}
返回字符串
}
//创建您的类型
let swiftString=“我是一根快捷的字符串”
var pointer=swiftString.NulterMinatedOutf8.withUnsafeBufferPointer{UnsafePointer($0.baseAddress)}
//把它换回来
var newSwiftString=stringFromYourType(&pointer)/&指针等效于(char**)

您可以查看GRDB.swift的源代码