2015-09-12 9 views
9

Ich versuche zu lernen, wie eine FFT mit Swift 2.0 erstellen, aber ich habe Probleme, die. Map-Funktion zum Kompilieren.Swift 2.0 Map "Instance Mitglied kann nicht auf Typ"

Der folgende Code funktioniert auf einem Spielplatz, aber nicht innerhalb von xCode als Mitglied einer Swift-Klasse.

bekomme ich folgende Fehlermeldung „Instanz Mitglied‚sineArraySize‘kann nicht auf Typ

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

Jede Hilfe‚FFTAnalyser‘verwendet werden, würde sehr geschätzt werden. Dank

Antwort

4

Der Fehler ist, weil sineWave versucht, Greifen Sie auf die self Eigenschaft sineArraySize und andere zu, bevor self initialisiert wurde (die Initialisierung erfolgt nach dem Definieren der Werte für Eigenschaften.) Um dies zu umgehen, können Sie Folgendes tun:

var sineWave : [Double] = [] 

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

Vielen Dank für Ihre Hilfe! Ich hatte Swift Fähigkeit überschätzt, Variablen automatisch zu initialisieren. Wenn Sie einfach alle Variablen in eine Methode verschieben oder einen Initialisierer verwenden, wird das Problem gelöst. – Sole