swift – 如何创建UnsafeMutablePointer >>

swift – 如何创建UnsafeMutablePointer >>,第1张

概述我正在使用 Swift的C API,并且我需要调用一个方法,我需要给出一个 UnsafeMutablePointer<UnsafeMutablePointer<UnsafeMutablePointer<Int8>>> 更多信息: Swift接口: public func presage_predict(prsg: presage_t, _ result: UnsafeMutablePointer< 我正在使用 Swift的C API,并且我需要调用一个方法,我需要给出一个
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”参数和&amp ;.在你的情况下,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 >>所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1089948.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存