2016-04-21 18 views
1

Ich möchte Timeout und brechen aus dieser Schleife in 5 Sekunden. Einzige Sache, die ich online finden konnte, ist, jede Sekunde eine variable Zählung zu bekommen und dann zu brechen, wenn die Zählung 5 ist, aber ich fragte mich, ob es eine leichtere, weniger kodierte Methode gibt. Bitte helfen Sie!Pause von While-Schleife nach 5 Sekunden in Swift

+1

Sie können die aktuelle Zeit messen, bevor die Schleife eintritt, und wieder jedes Mal, wenn Sie laufen die Schleife. Vergleichen Sie den tatsächlichen Wert mit dem, den Sie am Anfang erhalten haben, und wenn der Unterschied größer als 5 Sekunden ist, brechen Sie ab. Dies ist nur eine direkte Antwort auf das, wonach Sie gefragt haben. Die Antwort von @ AlBlue ist jedoch, was Sie unter iOS tun sollten. –

+0

... oder ein anderes System, bei dem das Blockieren des Hauptthreads das Blockieren der grafischen Benutzeroberfläche bedeutet. –

+1

Es gibt nichts wie "weniger Codier". Die wichtigste Metrik ist "korrekt" und "lesbarer". Unendliche Zyklen, die auf diese Weise gemacht werden, sind in erster Linie falsch. Ein Zeitlimit wird sie nicht verbessern. – Sulthan

Antwort

4

Das Problem mit einer while-Schleife ist, dass es die Verwendung der Anwendung durch den Benutzer blockiert, wenn sie auf dem Hauptthread ist. Stattdessen sollten Sie mit der Aktualisierung des Standorts beginnen und dann einen Hintergrund-Thread mithilfe von GCD planen (vorausgesetzt, Sie sind auf OSX; GCD ist unter Linux noch nicht verfügbar), um den Standort-Manager innerhalb von fünf Sekunden zu deaktivieren. Sie können auch festlegen, dass das Programm in einer Sekunde ausgeführt wird. Überprüfen Sie, ob es vorhanden ist, und versuchen Sie es erneut oder lassen Sie es fünf Sekunden lang laufen.

0

können Sie eine Verzögerung Funktion wie folgt erstellen:

func delay(delay:Double, closure:()->()) { 

     dispatch_after(
      dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), closure) 


    } 

und danach wie folgt Gebrauch:

delay(5){ 
locationManager.location = //something different from nil or you can try with break sentence ; not sure if with break will work though . 

    } 
Verwandte Themen