加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 如何创建UnsafeMutablePointer >>

发布时间:2020-12-14 02:29:09 所属栏目:百科 来源:网络整理
导读:我正在使用 Swift的C API,并且我需要调用一个方法,我需要给出一个 UnsafeMutablePointerUnsafeMutablePointerUnsafeMutablePointerInt8 更多信息: Swift接口: public func presage_predict(prsg: presage_t,_ result: UnsafeMutablePointerUnsafeMutablePo
我正在使用 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>> = nil
if 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>> = nil
if 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]: say
prediction[1]: said
prediction[2]: savages
prediction[3]: saw
prediction[4]: sat
prediction[5]: same

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读