Esta crónica fue probado por nuestros expertos para que tengas la garantía de la veracidad de este tutorial.
Solución:
Esto funcionará:
override func viewDidLoad()
super.viewDidLoad()
// Swift block syntax (iOS 10+)
let timer = Timer(timeInterval: 0.4, repeats: true) _ in print("Done!")
// Swift >=3 selector syntax
let timer = Timer.scheduledTimer(timeInterval: 0.4, target: self, selector: #selector(self.update), userInfo: nil, repeats: true)
// Swift 2.2 selector syntax
let timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: #selector(MyClass.update), userInfo: nil, repeats: true)
// Swift <2.2 selector syntax
let timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: "update", userInfo: nil, repeats: true)
// must be internal or public.
@objc func update()
// Something cool
Para Swift 4, el método del que desea obtener el selector debe estar expuesto a Objective-C, por lo tanto @objc
attribute debe agregarse a la declaración del método.
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:
import UIKit
class ViewController: UIViewController
var counter = 0
var timer = Timer()
@IBOutlet weak var label: UILabel!
// start timer
@IBAction func startTimerButtonTapped(sender: UIButton)
timer.invalidate() // just in case this button is tapped multiple times
// start the timer
timer = Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true)
// stop timer
@IBAction func cancelTimerButtonTapped(sender: UIButton)
timer.invalidate()
// called every time interval from the timer
func timerAction()
counter += 1
label.text = "(counter)"
Evento retrasado
También puede usar un temporizador para programar un evento único para algún momento en el futuro. La principal diferencia con el ejemplo anterior es que se utiliza repeats: false
en vez de true
.
timer = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: #selector(delayedAction), userInfo: nil, repeats: false)
El ejemplo anterior llama a un método llamado delayedAction
dos segundos después de configurar el temporizador. No se repite, pero aún puedes llamar timer.invalidate()
si necesita cancelar el evento antes de que suceda.
notas
- Si existe alguna posibilidad de iniciar su instancia de temporizador varias veces, asegúrese de invalidar primero la instancia de temporizador anterior. De lo contrario, pierde la referencia al temporizador y ya no puede detenerlo. (ver estas preguntas y respuestas)
- No utilice temporizadores cuando no se necesiten. Consulte la sección de temporizadores de la Guía de eficiencia energética para aplicaciones iOS.
Relacionado
- Cómo trabajar con fechas y horas en Swift
Actualizado a Swift 4, aprovechando la información de usuario:
class TimerSample
var timer: Timer?
func startTimer()
timer = Timer.scheduledTimer(timeInterval: 5.0,
target: self,
selector: #selector(eventWith(timer:)),
userInfo: [ "foo" : "bar" ],
repeats: true)
// Timer expects @objc selector
@objc func eventWith(timer: Timer!)
let info = timer.userInfo as Any
print(info)
Calificaciones y reseñas
Si tienes alguna incertidumbre y capacidad de aumentar nuestro crónica te proponemos escribir una crítica y con mucho gusto lo interpretaremos.