
UnsafeMutablePointer<UnsafeMutablePointer<UnsafeMutablePointer<Int8>>>
更多信息:
Swift接口:
public func presage_predict(prsg: presage_t,_ result: UnsafeMutablePointer<UnsafeMutablePointer<UnsafeMutablePointer<Int8>>>) -> presage_error_code_t
原C:
presage_error_code_t presage_predict(presage_t prsg,char*** result);通常,如果函数采用UnsafePointer< T>参数
那么你可以传递一个类型为T的变量,如“inout”参数和& ;.在你的情况下,T是
UnsafeMutablePointer<UnsafeMutablePointer<Int8>>
这是char **的Swift映射.所以你可以调用C函数
如
var prediction : UnsafeMutablePointer<UnsafeMutablePointer<Int8>> = nilif presage_predict(prsg,&prediction) == PRESAGE_OK { ... } 从Presage库的文档和示例代码我
明白这会分配一个字符串数组并分配
此数组的地址为预测指向的变量.
为了避免内存泄漏,最终必须释放这些字符串
同
presage_free_string_array(prediction)
为了证明这确实有效,我采取了第一个
部分演示代码在presage_c_demo.c并翻译过来
到斯威夫特:
// Duplicate the C strings to avoID premature deallocation:let past = strdup("dID you not sa")let future = strdup("")func get_past_stream(arg: UnsafeMutablePointer<VoID>) -> UnsafePointer<Int8> { return UnsafePointer(past)}func get_future_stream(arg: UnsafeMutablePointer<VoID>) -> UnsafePointer<Int8> { return UnsafePointer(future)}var prsg = presage_t()presage_new(get_past_stream,nil,get_future_stream,&prsg)var prediction : UnsafeMutablePointer<UnsafeMutablePointer<Int8>> = nilif presage_predict(prsg,&prediction) == PRESAGE_OK { for var i = 0; prediction[i] != nil; i++ { // Convert C string to Swift `String`: let pred = String.fromCString(prediction[i])! print ("prediction[\(i)]: \(pred)") } presage_free_string_array(prediction)}free(past)free(future) 这实际上起作用并产生了输出
prediction[0]: sayprediction[1]: saIDprediction[2]: savagesprediction[3]: sawprediction[4]: satprediction[5]: same总结
以上是内存溢出为你收集整理的swift – 如何创建UnsafeMutablePointer >>全部内容,希望文章能够帮你解决swift – 如何创建UnsafeMutablePointer >>所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)