【问题标题】:Swift pointer to pointer to const char parameter指向 const char 参数的指针的 Swift 指针
【发布时间】:2015-12-06 15:53:59
【问题描述】:

在与 Swift 的 C api(SQLite 3 C api)交互时,我需要将指向 const char 的指针作为输出参数传递:

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

翻译成 Swift 为:

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

此输出参数希望最终可用作字符串。 您可以轻松地将 Swift String 传递给 const char *,但我不明白如何从双重间接获取可用的东西。

任何人都可以在这里解释一下吗?

【问题讨论】:

标签: swift pointers out-parameters


【解决方案1】:

我玩这个玩得很开心。 我之前没有接触过任何 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 **)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多