Swift指向const char参数的指针

时间:2015-12-06 15:53:59

标签: 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<UnsafePointer<Int8>>
)

这个out参数最终可以用作字符串。 您可以轻松地将Swift String传递给const char *,但我不了解如何从双重间接获取可用内容。

有人能在这里说清楚吗?

1 个答案:

答案 0 :(得分:2)

我玩这个玩得很开心。

之前我还没碰到任何C-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 **)