2015-09-12 20 views
9

Sto cercando di imparare come creare un FFT utilizzando swift 2.0, ma ho problemi a compilare la funzione .map.Mappa Swift 2.0 "Membro di istanza non può essere utilizzato sul tipo"

Il seguente codice funziona in un parco giochi ma non in xCode come membro di una classe rapida.

ottengo il seguente errore "membro di istanza 'sineArraySize' non può essere utilizzato su tipo 'FFTAnalyser'

import Foundation 
import Accelerate 

class FFTAnalyser { 
    let sineArraySize = 64 // Should be power of two for the FFT 

    let frequency1 = 4.0 
    let phase1 = 0.0 
    let amplitude1 = 2.0 

    var sineWave = (0..<sineArraySize).map { 
     amplitude1 * sin(2.0 * M_PI/Double(sineArraySize) * Double($0) * frequency1 + phase1) 
    } 

    func plotArray<T>(arrayToPlot:Array<T>) { 
     for x in arrayToPlot { 
      print(x) 
     } 
    } 
} 

Qualsiasi aiuto sarebbe molto apprezzato. Grazie

risposta

4

L'errore è dovuto al fatto sineWave cerca di accedere alla proprietà selfsineArraySize e altri prima dello self è stato inizializzato (l'inizializzazione avviene dopo aver definito i valori per le proprietà). Per ovviare a questo, è possibile eseguire questa operazione:

var sineWave : [Double] = [] 

init() { 
    sineWave = (0..<sineArraySize).map { 
     amplitude1 * sin(2.0 * M_PI/Double(sineArraySize) * Double($0) * frequency1 + phase1) 
    } 
} 
+2

Grazie per il vostro aiuto! Avevo valutato la capacità di Swift di inizializzare automaticamente le variabili. Semplicemente spostando tutte le variabili in un metodo, o usando un inizializzatore risolto il problema. – Sole

Problemi correlati