How can I convert the following pointers initialization from Swift 2 to Swift 3?
var values: [Double] ... var valuesAsComplex : UnsafeMutablePointer<DSPDoubleComplex>? values.withUnsafeBufferPointer { (resultPointer: UnsafeBufferPointer<Double>) -> Void in valuesAsComplex = UnsafeMutablePointer<DSPDoubleComplex>( resultPointer.baseAddress ) } Update: Thank your for all the answers. Permanently rebinding the pointer as @Aderstedt suggests works but returning the result doesn't. Any ideas?
// Create result var result = [Double](repeating: 0.0, count: N/2) var resultAsComplex : UnsafeMutablePointer<DSPDoubleComplex>? result.withUnsafeMutableBytes { resultAsComplex = $0.baseAddress?.bindMemory(to: DSPDoubleComplex.self, capacity: result.count) } // Do complex->real inverse FFT. vDSP_fft_zripD(fftSetup!, &tempSplitComplex, 1, LOG_N, FFTDirection(FFT_INVERSE)); // This leaves result in packed format. Here we unpack it into a real vector. vDSP_ztocD(&tempSplitComplex, 1, resultAsComplex!, 2, N2); // Neither the forward nor inverse FFT does any scaling. Here we compensate for that. var scale : Double = 0.5/Double(N); vDSP_vsmulD(&result, 1, &scale, &result, 1, vDSP_Length(N)); return result