2016-09-11 5 views
1

Свифт подпись убыстрения функции рамки vDSP_biquadm() включает типы параметрических UnsafeMutablePointer<UnsafePointer<Float>> и UnsafeMutablePointer<UnsafeMutablePointer<Float>>.Создание параметра UnsafeMutablePointer <UnsafeMutablePointer <Float>> в Swift 3

Как объявить и создать такие типы в Swift 3, а затем заполнить эти указательные массивы ссылками на несколько массивов Swift типа [Float].

ответ

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) 
    } 
}