我正在使用来自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);发布于 2015-09-21 15:26:04
可能有一种更好的方法,但它在游乐场中运行,并用您想要的类型定义一个值r:
func ptrFromAddress<T>(p:UnsafeMutablePointer<T>) -> UnsafeMutablePointer<T>
{
return p
}
var myInt:Int8 = 0
var p = ptrFromAddress(&myInt)
var q = ptrFromAddress(&p)
var r = ptrFromAddress(&q)定义ptrFromAddress有什么意义,它似乎什么也做不了?我的想法是,Swift互操作书中讨论可变指针的部分展示了通过将某个表达式作为参数传递来初始化它们的许多方法(如&x),但似乎没有展示相应的方法,您可以简单地调用UnsafeMutablePointer的初始化器。
更新:
虽然我相信上面的方法是正确的,但@alisoftware在另一个论坛中指出,这似乎是一种更安全、更地道的方式来做同样的事情:
var myInt: Int8 = 0
withUnsafeMutablePointer(&myInt) { (var p) in
withUnsafeMutablePointer(&p) { (var pp) in
withUnsafeMutablePointer(&pp) { (var ppp) in
// Do stuff with ppp which is a UnsafeMutablePointer<UnsafeMutablePointer<UnsafeMutablePointer<Int8>>>
}
}
}它更惯用,因为您使用的是由Swift标准库提供的函数withUnsafeMutablePointer,而不是定义自己的帮助器。这样更安全,因为您可以保证UnsafeMutablePointer只在调用闭包的过程中是活动的(只要闭包本身不存储指针)。
https://stackoverflow.com/questions/32687808
复制相似问题