web-dev-qa-db-fra.com

NSTimer - comment retarder dans Swift

J'ai un problème avec le retard du déplacement de l'ordinateur dans un jeu.

J'ai trouvé des solutions mais elles ne fonctionnent pas dans mon cas, par ex.

var delay = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: nil, userInfo: nil, repeats: false)

J'ai essayé de l'utiliser avec la fonction fire mais aussi sans effet.

Quelles sont les autres possibilités?

30
Dandy

Swift

Avec GCD:

let delayInSeconds = 4.0
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delayInSeconds) {

    // here code perfomed with delay

}

ou avec une minuterie:

func myPerformeCode() {

   // here code to perform
}
let myTimer : Timer = Timer.scheduledTimer(timeInterval: 4, target: self, selector: #selector(self.myPerformeCode), userInfo: nil, repeats: false)

Swift 2

Avec GCD:

let seconds = 4.0
let delay = seconds * Double(NSEC_PER_SEC)  // nanoseconds per seconds
let dispatchTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))

dispatch_after(dispatchTime, dispatch_get_main_queue(), {

   // here code perfomed with delay

})

ou avec une minuterie:

func myPerformeCode(timer : NSTimer) {

   // here code to perform
}
let myTimer : NSTimer = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: Selector("myPerformeCode:"), userInfo: nil, repeats: false)
100
valfer

Avec Swift 4.2

Avec Timer Vous pouvez éviter d'utiliser un sélecteur, en utilisant une fermeture à la place:

    Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { (nil) in
        // Your code here
    }

Gardez à l'esprit que Timer est sans frais ponté avec CFRunLoopTimer, et que les boucles d'exécution et GCD sont deux approches complètement différentes .... e

4
eharo2

Dans Swift nous pouvons retarder en utilisant Dispatch_after.

Swift 3.0: -

DispatchQueue.main.asyncAfter(deadline: .now()+4.0) {

        alert.dismiss(animated: true, completion: nil)
    }
2
Ramakrishna

Que diriez-vous d'utiliser Grand Central Dispatch?

https://developer.Apple.com/library/ios/documentation/Performance/Reference/GCD_libdispatch_Ref/index.html

Valfer vous a montré comment

0
JSA986