Swift 指向 const char 参数的指针
Swift pointer to pointer to const char parameter
当与来自 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 *
,但我不明白如何从双向间接寻址中获得可用的东西。
任何人都可以在这里阐明一些问题吗?
我玩这个玩得很开心。
我之前没有接触过任何 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>([=10=].baseAddress) }
// Convert it back
var newSwiftString = stringFromYourType(&pointer) // &pointer is equivalent to (char **)
当与来自 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 *
,但我不明白如何从双向间接寻址中获得可用的东西。
任何人都可以在这里阐明一些问题吗?
我玩这个玩得很开心。 我之前没有接触过任何 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>([=10=].baseAddress) }
// Convert it back
var newSwiftString = stringFromYourType(&pointer) // &pointer is equivalent to (char **)