2014-09-15 3 views
5

Nur eine einfache Aufgabe, aber ich bin in Schwierigkeiten. Versuche einen anderen Weg zu gehen, aber es scheitert.ViewController.Type hat kein Mitglied mit dem Namen

enter image description here

Wie NSTimer mit erklärte zuvor Variable init? Weder var noch lassen hilft.

+0

Mögliche Duplikat von [Wie Eigenschaften initialisieren, die voneinander abhängig sind] (http://stackoverflow.com/questions/25854300/how-to-initialize-properties- das-voneinander-abhängig) –

Antwort

10

Der Anfangswert einer Eigenschaft (in Ihrem Fall: timer) kann nicht von einer anderen Eigenschaft der Klasse abhängen (in Ihrem Fall: interval).

Deshalb müssen Sie die assigment timer = NSTimer(interval, ...) in eine Methode der Klasse bewegen, z.B. in viewDidLoad. Folglich muss timer als optional oder implizit unverpackt optional definiert werden.

Beachten Sie auch, dass Selector(...) ein Literal Zeichenfolge als Argument verwendet, nicht die Methode selbst.

dies sollte also funktionieren:

class ViewController: UIViewController { 

    var interval : NSTimeInterval = 1.0 
    var timer : NSTimer! 

    func timerRedraw() { 

    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     timer = NSTimer(timeInterval: interval, target: self, selector: Selector("timerRedraw"), userInfo: nil, repeats: true) 

     // ... 
    } 

    // Other methods ... 
} 
0

Versuchen:

var interval:NSTimeInterval = 1.0 
var timer = NSTimer.scheduledTimerWithTimeInterval(interval, target: self, selector: "timerRedraw:", userInfo: nil, repeats: true) 

pro-Spitze und hoffentlich ein geschätzter FYI: Swift-Funktionen sollten auch mit Kleinbuchstaben (das heißt "timerRedraw") beginnen.

+0

Leider hilft es nicht. Das gleiche Problem erscheint: Intervall nicht gefunden –

+0

ja, ich vergaß zu beachten, dass Sie Ihre beiden Variablen in Ihre „' viewDidLoad'“Methode setzen müssen. Das ist genau das, was der andere richtig beantwortet hat. Ich habe ihm dafür +1 gegeben. –