【问题标题】:Creating an UnsafeMutablePointer<UnsafeMutablePointer<Float>> parameter in Swift 3在 Swift 3 中创建 UnsafeMutablePointer<UnsafeMutablePointer<Float>> 参数
【发布时间】:2016-09-11 22:39:40
【问题描述】:
Accelerate框架vDSP_biquadm()函数的Swift签名包括UnsafeMutablePointer<UnsafePointer<Float>>和UnsafeMutablePointer<UnsafeMutablePointer<Float>>的参数类型。
如何在 Swift 3 中声明和创建此类类型,然后使用对多个 [Float] 类型的 Swift 数组的引用填充这些指针数组。
【问题讨论】:
标签:
swift
signal-processing
【解决方案1】:
当您需要为UnsafeMutablePointer<T> 参数传递多个值时,您需要声明一个[T](又名Array<T>)类型的变量并将其作为inout 参数传递。在您的情况下,T 是 UnsafeMutablePointer<Float>。
所以,如果你想以[Float] 开头,你可能需要这样写:
let input: [Float] = [/*...*/]
var output: [Float] = Array(repeating: 0, count: outputTotalSize)
input.withUnsafeBufferPointer {inBuf in
let inputPtr = inBuf.baseAddress!
output.withUnsafeMutableBufferPointer {outBuf in
let outputPtr = outBuf.baseAddress!
var pInputs: [UnsafePointer<Float>] = [inputPtr,/*...*/]
var pOutputs: [UnsafeMutablePointer<Float>] = [outputPtr/*...*/]
vDSP_biquadm(setup, &pInputs, inStride, &pOutputs, outStride, length)
}
}