2017-09-23 16 views
0

Dans les versions antérieures de Swift, ce code fonctionne parfaitement.Comment écrire GCD asyncAfter dans Swift 4?

DispatchQueue.main.asyncAfter(deadline: .now() + delay) { timer in 
    self.setOriginalState() 
    self.shakeAnimation() 
} 

Mais Swift 4 l'erreur suivante apparaît:

référence à un membre Ambigu 'asyncAfter (date limite: QOS: drapeaux: execute :)'

Comment peut-on créer un délai avant d'exécuter une séquence de code dans Swift 4?

+1

il suffit d'enlever "timer in". Alors le travail bien. –

+1

"Dans les versions antérieures de Swift, ce code fonctionne parfaitement" Néanmoins, il a toujours eu tort. Tout ce qui est arrivé est que le compilateur a cessé d'être si indulgent. – matt

Répondre

3

Essayer dans le terrain de jeu ne pose aucun problème, c'est juste "manquant" est la référence "timer".

DispatchQueue.main.asyncAfter(deadline: .now() + 3) { 
    print("Dispatching after") 
} 

DispatchQueue.main.asyncAfter(deadline: .now() + 3, qos: .userInteractive, flags: []) { 
    print("Dispatching after") 
} 

Les deux semblent fonctionner, êtes-vous sûr que le problème n'est pas ailleurs?

+0

Merci, Andrea monsieur ... travail parfait. –