ios - Función de retraso en swift
function delay (4)
Para agregar argumento a la función de retraso.
Primero configure un diccionario y luego agréguelo como userInfo. Desenvuelva la información con el temporizador como argumento.
let arg : Int = 42
let infoDict : [String : AnyObject] = ["argumentInt", arg]
NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(3), target: self, selector: "functionHereWithArgument:", userInfo: infoDict, repeats: false)
Luego en la función llamada
func functionHereWithArgument (timer : NSTimer)
{
if let userInfo = timer.userInfo as? Dictionary<String, AnyObject>
{
let argumentInt : Int = (userInfo[argumentInt] as! Int)
}
}
Esta pregunta ya tiene una respuesta aquí:
- dispatch_after - GCD en Swift? 23 respuestas
No tengo un código para probar ni nada, porque no tengo idea de cómo hacerlo, pero ¿alguien puede decirme cómo retrasar una función con rapidez durante un período de tiempo determinado?
Puede usar GCD (en el ejemplo con un retraso de 10 segundos):
Swift 2
let triggerTime = (Int64(NSEC_PER_SEC) * 10)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, triggerTime), dispatch_get_main_queue(), { () -> Void in
self.functionToCall()
})
Swift 3 y Swift 4
DispatchQueue.main.asyncAfter(deadline: .now() + 10.0, execute: {
self.functionToCall()
})
Swift 3 y versiones anteriores por un retraso de 10 segundos
unowned let unownedSelf = self
let deadlineTime = DispatchTime.now() + .seconds(10)
DispatchQueue.main.asyncAfter(deadline: deadlineTime, execute: {
unownedSelf.functionToCall()
})
NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(3), target: self, selector: "functionHere", userInfo: nil, repeats: false)
Esto llamaría a la función functionHere () con un retraso de 3 segundos