【发布时间】:2016-10-19 10:07:52
【问题描述】:
在 Swift 3 中,我需要将数据发送到接受 float ** 输入的 C 对象。
在 Swift 2 中,我曾经声明一个 UnsafeMutablePointer< UnsafeMutablePointer<Float32>>,构造一个 swift 数组(仅用于 init!),然后将其传递给指针,并且它起作用了:
var bufferOut: UnsafeMutablePointer< UnsafeMutablePointer<Float32>>?
arrayOut = Array(repeating: Array(repeating: 0, count: Int(size1), count: Int(size2))
bufferOut = UnsafeMutablePointer< UnsafeMutablePointer<Float32>>(arrayOut)
现在这一切在 Swift 3 中都被打破了!
- 传递 C 样式
float**并对其进行初始化的最快捷方式是什么? - 在
UnsafeMutablePointer< UnsafeMutablePointer<T>>中分配值的最佳方式是什么?
文档说T ** 应该使用AutoreleasingUnsafeMutablePointer<T>,但我实际上从未设法构建一个!
请注意,我实际上并不关心上面示例中的数组!如果我可以直接使用已知容量初始化指针,我会的。
注意:Expected use cases Section of UnsafeRawPointer 描述了 C 数组和 C 缓冲区等有用的情况,但是为上述构造转换这些方法并不明显!
【问题讨论】:
标签: c swift3 unsafemutablepointer