Dans les versions antérieures de Swift, on pouvait créer un retard avec le code suivant:
let time = dispatch_time(dispatch_time_t(DISPATCH_TIME_NOW), 4 * Int64(NSEC_PER_SEC))
dispatch_after(time, dispatch_get_main_queue()) {
//put your code which should be executed with a delay here
}
Mais maintenant, dans Swift 3, Xcode change automatiquement 6 choses différentes mais l'erreur suivante apparaît: "Impossible de convertir DispatchTime.now
à la valeur attendue dispatch_time_t
aka UInt64
."
Comment créer un délai avant d'exécuter une séquence de code dans Swift 3?
DispatchQueue.main.asyncAfter(deadline: when)
J'aime la notation sur une ligne pour GCD, c'est plus élégant:
De plus, dans iOS 10, nous avons de nouvelles méthodes de temporisation, par exemple l'initialisation de bloc:
(l'action retardée peut donc être annulée)
Btw, gardez à l'esprit: par défaut, la minuterie est ajoutée au mode de boucle d'exécution par défaut. Cela signifie que le minuteur peut être gelé lorsque l'utilisateur interagit avec l'interface utilisateur de votre application (par exemple, lors du défilement d'un UIScrollView). Vous pouvez résoudre ce problème en ajoutant le minuteur au mode de boucle d'exécution spécifique:
À cet article de blog, vous pouvez trouver plus de détails.
la source
Essayez la fonction suivante implémentée dans Swift 3.0 et supérieur
Usage
la source
Essayez le code ci-dessous pour le retard
la source
Une façon consiste à utiliser
DispatchQueue.main.asyncAfter
comme beaucoup de gens ont répondu.Une autre façon est d'utiliser
perform(_:with:afterDelay:)
. Plus de détails icila source
// Exécute la fonction après x secondes
//Utilisation:-
la source