web-dev-qa-db-fra.com

Retarder la fonction dans swift

Je n'ai pas de code à échantillonner ou quoi que ce soit, parce que je ne sais pas comment le faire, mais quelqu'un peut-il me dire s'il vous plaît comment retarder une fonction avec Swift pendant un laps de temps déterminé?

113
CoolMAn

Vous pouvez utiliser GCD (dans l'exemple avec un délai de 10 secondes):

Swift 2

let triggerTime = (Int64(NSEC_PER_SEC) * 10)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, triggerTime), dispatch_get_main_queue(), { () -> Void in
    self.functionToCall()
})

Swift 3 et Swift 4

DispatchQueue.main.asyncAfter(deadline: .now() + 10.0, execute: {
    self.functionToCall()
})
335
Farlei Heinen

Swift Version pour un délai de 10 secondes

unowned let unownedSelf = self

let deadlineTime = DispatchTime.now() + .seconds(10)
DispatchQueue.main.asyncAfter(deadline: deadlineTime, execute: { 
     unownedSelf.functionToCall()
})
27
Anand
 NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(3), target: self, selector: "functionHere", userInfo: nil, repeats: false)

Ceci appellerait la fonction functionHere () avec un délai de 3 secondes

23
JChomali

Pour ajouter un argument à la fonction de retard.

Commencez par configurer un dictionnaire, puis ajoutez-le en tant que userInfo. Déballez les informations avec la minuterie comme argument.

let arg : Int = 42
let infoDict : [String : AnyObject] = ["argumentInt", arg]

NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(3), target: self, selector: "functionHereWithArgument:", userInfo: infoDict, repeats: false)

Puis dans la fonction appelée

func functionHereWithArgument (timer : NSTimer)
{
    if let userInfo = timer.userInfo as? Dictionary<String, AnyObject>
    {
         let argumentInt : Int = (userInfo[argumentInt] as! Int)
    }
}
3
KorinW