constiftnsPointer在Swift FFT中未解析的标识符

时间:2015-04-20 00:42:31

标签: xcode swift fft identifier vdsp

我一直在研究Swift中的FFT示例,当使用vDSP_ctozD时,它们似乎都有ConstUnsafePointer,如下例所示:

import Foundation
import Accelerate

internal func spectrumForValues(signal: [Double]) -> [Double] {
// Find the largest power of two in our samples
let log2N = vDSP_Length(log2(Double(signal.count)))
let n = 1 << log2N
let fftLength = n / 2

// This is expensive; factor it out if you need to call this function a lot
let fftsetup = vDSP_create_fftsetupD(log2N, FFTRadix(kFFTRadix2))

var fft = [Double](count:Int(n), repeatedValue:0.0)

// Generate a split complex vector from the real data
var realp = [Double](count:Int(fftLength), repeatedValue:0.0)
var imagp = realp

withExtendedLifetimes(realp, imagp) {
    var splitComplex = DSPDoubleSplitComplex(realp:&realp, imagp:&imagp)

    // Take the fft
    vDSP_fft_zripD(fftsetup, &splitComplex, 1, log2N, FFTDirection(kFFTDirection_Forward))

    // Normalize
    var normFactor = 1.0 / Double(2 * n)
    vDSP_vsmulD(splitComplex.realp, 1, &normFactor, splitComplex.realp, 1, fftLength)
    vDSP_vsmulD(splitComplex.imagp, 1, &normFactor, splitComplex.imagp, 1, fftLength)

    // Zero out Nyquist
    splitComplex.imagp[0] = 0.0

    // Convert complex FFT to magnitude
    vDSP_zvmagsD(&splitComplex, 1, &fft, 1, fftLength)
}

// Cleanup
vDSP_destroy_fftsetupD(fftsetup)
return fft
}

// To get rid of the `() -> () in` casting
func withExtendedLifetime<T>(x: T, f: () -> ()) {
return Swift.withExtendedLifetime(x, f)
}

// In the spirit of withUnsafePointers
func withExtendedLifetimes<A0, A1>(arg0: A0, arg1: A1, f: () -> ()) {
return withExtendedLifetime(arg0) { withExtendedLifetime(arg1, f) }
}

但是,当我尝试在我的项目中使用它时,此ConstUnsafePointer被视为未解析的标识符。有任何线索如何解决这个问题?提前谢谢。

1 个答案:

答案 0 :(得分:4)

去年夏天,在早期Swift测试版中使用了名称ConstUnsafePointer(当时,UnsafePointer意味着可变)。现在,常量指针只是UnsafePointer,可变指针是UnsafeMutablePointer