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”参数和& ;.在你的情况下,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) 为了证明这确实有效,我采取了第一个 // 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |