Recherche…


Paramètres

Paramètre Détails
interval Le temps, en secondes, à attendre avant de déclencher la minuterie; ou, en répétant les minuteries, le temps entre les tirs.
target L'objet sur lequel appeler le selector
selector Dans Swift, un objet Selector spécifiant la méthode à utiliser sur la target
repeats Si la valeur est false , déclenchez la minuterie une seule fois. Si true , le feu de la minuterie chaque interval secondes.

Remarques

Un NSTimer vous permet d'envoyer un message à une cible après une période de temps spécifiée.

Créer une minuterie

Cela créera une minuterie pour appeler la méthode doSomething sur lui- self en 5 secondes.

Rapide

let timer = NSTimer.scheduledTimerWithTimeInterval(5,
                               target: self,
                             selector: Selector(doSomething()),
                             userInfo: nil,
                              repeats: false)

Swift 3

 let timer = Timer.scheduledTimer(timeInterval: 1,
                                        target: self, 
                                      selector: #selector(doSomething()), 
                                      userInfo: nil, 
                                       repeats: true)

Objectif c

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(doSomething) userInfo:nil repeats:NO];

Régler les répétitions sur false/NO indique que nous voulons que le minuteur ne se déclenche qu'une seule fois. Si nous définissons cette valeur sur true/YES , elle se déclenche toutes les cinq secondes jusqu'à ce qu'elle soit invalidée manuellement.

Lancer manuellement une minuterie

Rapide

timer.fire()

Objectif c

[timer fire];

L'appel de la méthode d' fire provoque l'exécution par NSTimer de la tâche qu'il aurait normalement effectuée sur une planification.

Dans un minuteur non répétitif , cela invalidera automatiquement le minuteur. En d’autres termes, le fait d’appeler le fire avant l’intervalle de temps ne produira qu’une seule invocation.

Dans un compte à rebours , cela invoquera simplement l'action sans interrompre le programme habituel.

Invalider une minuterie

Rapide

timer.invalidate()

Objectif c

[timer invalidate];

Cela empêchera la minuterie de se déclencher. Doit être appelé à partir du thread dans lequel le minuteur a été créé, voir les notes d'Apple :

Vous devez envoyer ce message à partir du thread sur lequel la minuterie a été installée. Si vous envoyez ce message à partir d'un autre thread, la source d'entrée associée à la minuterie peut ne pas être supprimée de sa boucle d'exécution, ce qui peut empêcher la sortie du thread correctement.

Notes: Une fois le minuteur désactivé, il est impossible de déclencher le même minuteur invalidé. Au lieu de cela, vous devez initialiser à nouveau le minuteur invalidé et déclencher la méthode de tir.

Options de fréquence de minuterie

Minuterie répétée

Rapide

class ViewController: UIViewController {
 
    var timer = NSTimer()
    
    override func viewDidLoad() {
        NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector(self.timerMethod()), userInfo: nil, repeats: true)
    }

    func timerMethod() {
        print("Timer method called")
    }

    func endTimer() {
        timer.invalidate()
    }
}

Swift 3

class ViewController: UIViewController {
     
        var timer = Timer()
        
        override func viewDidLoad() {
            Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(self.timerMethod()), userInfo: nil, repeats: true)
        }
    
        func timerMethod() {
            print("Timer method called")
        }

        func endTimer() {
            timer.invalidate()
        }
    }

Doit être invalidé manuellement si vous le souhaitez.

Rapide

Événement retardé non répété

NSTimer.scheduledTimerWithTimeInterval(3.0, target: self, selector: Selector(self.timerMethod()), userInfo: nil, repeats: false)

Swift 3

 Timer.scheduledTimer(timeInterval: 3.0, target: self, selector: #selector(self.timerMethod()), userInfo: nil, repeats: false)

La minuterie sera déclenchée une fois, 3 secondes après le moment de l'exécution. Sera invalidé automatiquement, une fois tiré.

Transmission de données à l'aide de la minuterie

Si vous souhaitez transmettre des données avec la temporisation, vous pouvez le faire avec le paramètre userInfo .

Voici l'approche simple qui donne une brève idée de la manière dont vous pouvez transmettre les données à la méthode déclenchée à partir du minuteur.

[ Swift 3 ]

Timer.scheduledTimer(timeInterval: 1.0, target: self, selector:#selector(iGotCall(sender:)), userInfo: ["Name": "i am iOS guy"], repeats:true)

[ Objectif - C ]

NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                      target:self
                                                    selector:@selector(iGotCall:)
                                                    userInfo:@"i am iOS guy" repeats:YES];

La ligne de code ci-dessus qui passe ["Name": "i am iOS guy"] dans le userInfo . Donc, maintenant, lorsque l'appel iGotCall reçu, vous pouvez obtenir la valeur transmise comme ci-dessous.

[ Swift 3 ]

func iGotCall(sender: Timer) {
        print((sender.userInfo)!)
    }

[ Objectif - C ]

- (void)iGotCall:(NSTimer*)theTimer {
    NSLog (@"%@", (NSString*)[theTimer userInfo]);
}


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow