j'ai essayé
var timer = NSTimer()
timer(timeInterval: 0.01, target: self, selector: update, userInfo: nil, repeats: false)
Mais j'ai une erreur en disant
'(timeInterval: $T1, target: ViewController, selector: () -> (), userInfo: NilType, repeats: Bool) -> $T6' is not identical to 'NSTimer'
ios
nstimer
nstimeinterval
swift
user3225917
la source
la source
Réponses:
Cela fonctionnera:
Pour Swift 4, la méthode dont vous voulez obtenir le sélecteur doit être exposée à Objective-C, donc l'
@objc
attribut doit être ajouté à la déclaration de méthode.la source
Événement répété
Vous pouvez utiliser une minuterie pour effectuer une action plusieurs fois, comme illustré dans l'exemple suivant. Le minuteur appelle une méthode pour mettre à jour une étiquette toutes les demi-secondes.
Voici le code pour cela:
Événement retardé
Vous pouvez également utiliser une minuterie pour planifier un événement unique pendant un certain temps dans le futur. La principale différence avec l'exemple ci-dessus est que vous utilisez
repeats: false
au lieu detrue
.L'exemple ci-dessus appelle une méthode nommée
delayedAction
deux secondes après le réglage du temporisateur. Il n'est pas répété, mais vous pouvez toujours appelertimer.invalidate()
si vous devez annuler l'événement avant qu'il ne se produise.Remarques
en relation
la source
Mise à jour vers Swift 4, exploitant userInfo:
la source
NSTimer
objetDepuis iOS 10, il existe également une nouvelle méthode d'usine de minuterie basée sur des blocs qui est plus propre que l'utilisation du sélecteur:
la source
_ =
et de commencerTimer
?Swift 3, pré iOS 10
Swift 3, iOS 10+
Remarques
@objc
la source
timeInterval
Vérifier avec:
Swift 2
Swift 3, 4, 5
la source
self
être? UIView est ok?Vous devrez utiliser Timer au lieu de NSTimer dans Swift 3.
Voici un exemple:
la source
Swift 5
Personnellement, je préfère la minuterie avec fermeture de bloc:
la source
pour swift 3 et Xcode 8.2 (agréable d'avoir des blocs, mais si vous compilez pour iOS9 ET voulez userInfo):
...
la source
SimpleTimer (Swift 3.1)
Pourquoi?
Il s'agit d'une classe de minuteur simple en swift qui vous permet de:
Usage:
Code:
la source
Et créez du plaisir par le nom createEnemy
la source
Déclarez d'abord votre chronomètre
Ensuite, ajoutez la ligne dans viewDidLoad () ou dans n'importe quelle fonction que vous souhaitez démarrer la minuterie
C'est le func que vous le rappellerez pour faire quelque chose qu'il doit être @objc
la source
Dans Swift 3, quelque chose comme ça avec @objc:
la source
Si vous lancez la méthode de la minuterie
puis ajoutez-le à la boucle en utilisant la méthode autre sélecteur ne sera pas appelé
REMARQUE: Si vous souhaitez que cela se répète, effectuez des répétitions vraies et conservez la référence du minuteur, sinon la méthode de mise à jour ne sera pas appelée.
Si vous utilisez cette méthode.
conserver une référence pour une utilisation ultérieure si les répétitions sont vraies.
la source
J'ai essayé de faire dans une classe NSObject et cela a fonctionné pour moi:
la source
NSTimer a été renommé Timer dans Swift 4.2. cette syntaxe fonctionnera en 4.2:
la source