2017-05-05 5 views
0

Wie funktioniert ein Timer im Timer?Swift 3 Timer im Timer

func startSequenz() 
{ 
    for mainCell in mainTable { 
     timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector:#selector(ViewController.run), userInfo: nil, repeats: true) 
    } 
} 

func run() 
{ 
    for cell in table{ 
     timer2 = Timer.scheduledTimer(timeInterval: 1, target: self, selector:#selector(ViewController.run2), userInfo: nil, repeats: true) 
    } 
    timer!.invalidate() 
} 

func run2() 
{ 
    currentSteps! += 1 
    print("\(currentSteps!)") 
    timer2!.invalidate() 
} 

Die Ausführung func run2() hört nie auf. Mein Ziel ist es, die Ausführung von run2 und sleep(1) freez die GUI zu verzögern.

UPDATE:

Ive Verwendung Tom E Antwort und es funktionierte teilweise. Die GUI wird jedoch nur einmal am Ende der Ausführung aktualisiert.

+0

Grundsätzlich funktioniert es, aber Sie verwenden ** einen ** (den gleichen) Timer für ** viele ** Zellen, die nicht funktionieren. – vadian

+0

Okay, ich sehe jede Schleife eine neue Instanz erstellen. Wie kann ich es lösen? Ich kann die Lösung jetzt nicht bekommen. – ZombieIK

Antwort

1

Es scheint nicht viel Sinn zu machen, einen Wiederholungstimer zu erstellen, der beim ersten Aufruf seiner Aktionsmethode sofort ungültig wird.

Wenn Sie nach geeigneten Möglichkeiten suchen, die Ausführung des Codes zu verzögern, sehen Sie sich bitte Grand Central Dispatch an. Hier ist ein Beispiel von Code mit nicht-blockierend, verzögert die Ausführung im Hintergrund:

DispatchQueue.global().asyncAfter(deadline: .now() + .seconds(1)) { 
    // This code will be placed on a background queue and be executed a second later 

    DispatchQueue.main.async { 
     // Here you may update any GUI elements 
    } 
} 

Bitte stellen Sie sicher, dass Sie Zugriff auf keine GUI-Elemente aus einer Hintergrund-Warteschlange. Aus diesem Grund zeigt das Beispiel, wie Sie für alle GUI-Aktualisierungen zum Hauptthread wechseln können.