2017-09-20 4 views
0

Tenir compte de ce code:intervallomètre pas de tir

import Foundation 
import PlaygroundSupport 

class Test 
{ 
    var interval:Timer? 
    var counter = 0 

    func start() 
    { 
     print("Starting ...") 
     interval = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) 
     { 
      timer in 
      self.counter += 1 
      print(self.counter) 
      if (self.counter < 10) { return } 

      self.interval?.invalidate() 
      self.interval = nil 
      print("Done!") 
      PlaygroundPage.current.finishExecution() 
     } 
     interval?.fire() 
    } 
} 


PlaygroundPage.current.needsIndefiniteExecution = true 
var test = Test() 
test.start() 

L'exécution de cette aire de jeu dans Xcode 8.3.3 mais l'intervalle ne démarre jamais. Qu'est-ce qui me manque?

+0

Je ne suis pas à mon ordinateur en ce moment, mais google "aire de jeux indéfinie d'exécution" – Kevin

+0

@Kevin J'ai mis à jour mon exemple selon https://stackoverflow.com/questions/24058336/how-do-i-run-asynchronous -callbacks-in-playground # 24066317 pour Playground mais toujours pas de tir. – BadmintonCat

+0

Fonctionne bien pour moi quand je copie et colle votre code. – Kevin

Répondre

1

La réponse est simple à ajouter à votre terrain de jeu:

import PlaygroundSupport 
PlaygroundPage.current.needsIndefiniteExecution = true 

Lorsque vous utilisez une aire de jeux, par défaut, le terrain de jeu fonctionne tout le code, puis arrête, il ne sait pas attendre la minuterie. Ce code indique simplement au terrain de jeu d'attendre que quelque chose se produise.

+0

Ça ne marche toujours pas. Voir le commentaire ci-dessus. – BadmintonCat

+0

Maintenant ça marche aussi pour moi! Si le simulateur iOS fonctionnait toujours en arrière-plan depuis hier et qu'il l'avait quitté et qu'il avait redémarré Xcode, cela a fait l'affaire. – BadmintonCat