ios - example - Pasar parámetros a un método llamado por NSTimer en Swift
timer.scheduledtimer swift 4 (2)
Estoy intentando pasar un argumento a un método que NSTimer llama en mi código. Lanza una excepción. Así es como lo estoy haciendo. Circle es mi clase personalizada.
var circle = Circle()
var timer = NSTimer.scheduledTimerWithInterval(1.0, target: self, selector: animate, userInfo: circle, repeats: true)
A continuación se muestra el método que se está llamando
func animate(circle: Circle) -> Void{
//do stuff with circle
}
Nota: El método está en la misma clase que se llama. Así que creo que he establecido el objetivo correctamente.
El selector que usa con NSTimer
pasa el objeto NSTimer
ya que es un parámetro único. Coloque el objeto del círculo en él como userInfo
y puede extraerlo cuando el temporizador se dispare.
var circle = Circle()
var timer = NSTimer.scheduledTimerWithInterval(1.0, target: self, selector: "animate:", userInfo: circle, repeats: true)
func animate(timer:NSTimer){
var circle = timer.userInfo as Circle
//do stuff with circle
}
Su selector debe ser una cadena a menos que se suponga que es un ivar. Además, su función animate
tiene la firma incorrecta. Los siguientes cambios deberían hacer que te muevas de nuevo:
var circle = Circle()
var timer = NSTimer.scheduledTimerWithInterval(1.0, target: self, selector: "animate", userInfo: circle, repeats: true)
func animate(circle: Circle) -> () {
//do stuff with circle
}
La función realmente no necesita devolver la tupla vacía; se puede escribir sin el -> ()
También he visto la cadena del selector envuelta en un método "Selector ()": Selector("animate")
. Funciona de cualquier manera.
He estado jugando con NSTimer
y me he NSTimer
y escribí un artículo sobre él: Usando los cierres de Swift con NSTimer