В Swift 4 я создаю DSPSplitComplex для использования в vDSP_fft_zip (), но он сразу же перезаписывается при следующем создании другого DSPSplitComplex.
(структура DSPSplitComplex имеет 2 UnsafeMutablePointer<Float>
)
//--Create the DSPSplitComplex
var A = [Float](repeating:0, count:32);
var B = [Float](repeating:0, count:32)
var splitComplex1 = DSPSplitComplex(realp: &A, imagp: &B)
//--Perform fft
log2Size = vDSP_Length(log2f(Float(32)))
setupFFT = vDSP_create_fftsetup(log2Size, FFTRadix(FFT_RADIX2))!;
vDSP_fft_zip(setupFFT, & splitComplex1, 1, log2Size, FFTDirection(FFT_FORWARD));
//--Create another DSPSplitComplex
var C = [Float](repeating:0, count:32);
var D = [Float](repeating:0, count:32)
var splitComplex2 = DSPSplitComplex(realp: &C, imagp: &D)
Теперь я вижу в отладчике, что UnsafeMutablePointer из splitComplex2.realp
является тем же адресом, что и splitComplex1.realp
, и, следовательно, все, что я делаю с splitComplex2, перезаписывает splitComplex1
Я предполагаю, что ключ может бытьв заголовке «небезопасно», но если это на самом деле непригодно, то какова правильная стратегия хранения содержимого возвращенного DSPSplitComplex?
Я думаю, создание из них новых массивов [Float] - это способ сделатьпостоянная копия
let arrary = Array(UnsafeBufferPointer(start: splitComplex1.realp, count: 32))
... но, похоже, несмотря на чтение документов Swift, я все еще неправильно понимаю смысл UnsafeMutablePointer, так как почему vDSP_fft_zip () возвращает что-то, что не может быть использовано с самого начала?