我有一个C API,其签名如下:
SendPing(char * content);
现在,我想从Swift调用它。 Swift好像自动将其导入为:
SendPing(content: UnsafeMutablePointer<Int8>!)
但是,当我在Swift中像这样尝试时:
var content:String = "sampledata"
SendPing(content)
我认为Swift可以自动处理从“字符串”到“ UnsafeMutablePointer”的转换,但事实并非如此。报告的错误是:“无法将'String'类型的值转换为预期的参数类型'UnsafeMutablePointer!。我记得它在Swift 3.0中有效,但是我可能是错的。
在Swift 4.2中处理此问题的正确方法是什么?
有问题的解决方案发布了:Swift convert string to UnsafeMutablePointer<Int8>对我不起作用。我无法找出根本原因,但我想这是由于Swift 4.2而引起的。
答案 0 :(得分:1)
跟进和总结:
1)链接Swift convert string to UnsafeMutablePointer<Int8>中的解决方案在Swift 4中不再有效。
2)要从字符串获取UnsafeMutablePointer(Int8),最简单的方法是:
let contentPointer = strdup(content)
3)但是,您应始终牢记释放内存是调用者的责任。上面的代码将使用新的内存,之后必须将其释放。
let contentPointer = strdup(content)
SendPing(content: contentPointer)
....
free(contentPointer)
否则,您将面临内存泄漏问题。