En versiones anteriores de Swift, uno podría crear un retraso con el siguiente código:
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
}
Pero ahora, en Swift 3, Xcode cambia automáticamente 6 cosas diferentes, pero luego aparece el siguiente error: "No se puede convertir DispatchTime.now
al valor esperado dispatch_time_t
aka UInt64
".
¿Cómo se puede crear un retraso antes de ejecutar una secuencia de código en Swift 3?
DispatchQueue.main.asyncAfter(deadline: when)
Me gusta la notación de una línea para GCD, es más elegante:
Además, en iOS 10 tenemos nuevos métodos de temporizador, por ejemplo, inicializador de bloque:
(por lo que se puede cancelar la acción retrasada)
Por cierto, tenga en cuenta: de manera predeterminada, el temporizador se agrega al modo de ciclo de ejecución predeterminado. Significa que el temporizador puede congelarse cuando el usuario interactúa con la interfaz de usuario de su aplicación (por ejemplo, al desplazarse por un UIScrollView). Puede resolver este problema agregando el temporizador al modo de ciclo de ejecución específico:
En esta publicación de blog puedes encontrar más detalles.
fuente
Pruebe la siguiente función implementada en Swift 3.0 y superior
Uso
fuente
Pruebe el siguiente código para retrasos
fuente
Una forma es usarlo
DispatchQueue.main.asyncAfter
como mucha gente ha respondido.Otra forma es usar
perform(_:with:afterDelay:)
. Más detalles aquífuente
// Ejecuta la función después de x segundos
//Utilizar:-
fuente