Lo intenté
var timer = NSTimer()
timer(timeInterval: 0.01, target: self, selector: update, userInfo: nil, repeats: false)
Pero recibí un error diciendo
'(timeInterval: $T1, target: ViewController, selector: () -> (), userInfo: NilType, repeats: Bool) -> $T6' is not identical to 'NSTimer'
ios
nstimer
nstimeinterval
swift
usuario3225917
fuente
fuente
Respuestas:
Esto funcionará:
Para Swift 4, el método del que desea obtener el selector debe estar expuesto a Objective-C, por lo tanto, el
@objc
atributo debe agregarse a la declaración del método.fuente
Evento repetido
Puede usar un temporizador para realizar una acción varias veces, como se ve en el siguiente ejemplo. El temporizador llama a un método para actualizar una etiqueta cada medio segundo.
Aquí está el código para eso:
Evento retrasado
También puede usar un temporizador para programar un evento único durante algún tiempo en el futuro. La principal diferencia con el ejemplo anterior es que usa en
repeats: false
lugar detrue
.El ejemplo anterior llama a un método llamado
delayedAction
dos segundos después de que se establece el temporizador. No se repite, pero aún puede llamartimer.invalidate()
si necesita cancelar el evento antes de que ocurra.Notas
Relacionado
fuente
Actualizado a Swift 4, aprovechando userInfo:
fuente
NSTimer
objetoA partir de iOS 10, también hay un nuevo método de fábrica de temporizador basado en bloques que es más limpio que usar el selector:
fuente
_ =
y comenzarTimer
?Swift 3, pre iOS 10
Swift 3, iOS 10+
Notas
@objc
fuente
timeInterval
Comprueba con:
Swift 2
Swift 3, 4, 5
fuente
self
ser? UIView está bien?Deberá usar el temporizador en lugar del NSTimer en Swift 3.
Aquí hay un ejemplo:
fuente
Swift 5
Personalmente prefiero el temporizador con el cierre de bloque:
fuente
para swift 3 y Xcode 8.2 (es bueno tener bloques, pero si compila para iOS9 Y desea información de usuario):
...
fuente
Temporizador simple (Swift 3.1)
¿Por qué?
Esta es una clase de temporizador simple en Swift que le permite:
Uso:
Código:
fuente
Y crea diversión por el nombre createEnemy
fuente
Primero declara tu temporizador
Luego agregue una línea en viewDidLoad () o en cualquier función que desee iniciar el temporizador
Esta es la función a la que devolverá la llamada para hacer algo que debe ser @objc
fuente
En Swift 3 algo así con @objc:
fuente
Si inicia el método del temporizador
luego agréguelo al bucle usando el método que no se llamará a otro selector
NOTA: Si desea que esto se repita, haga que las repeticiones sean verdaderas y mantenga la referencia del temporizador; de lo contrario, no se llamará al método de actualización.
Si estás usando este método.
mantenga una referencia para su uso posterior si las repeticiones son verdaderas.
fuente
Traté de hacer en una clase NSObject y esto funcionó para mí:
fuente
NSTimer ha cambiado de nombre a Timer en Swift 4.2. esta sintaxis funcionará en 4.2:
fuente