Search code examples
iosswiftnstimer

NSTimer - how to delay in Swift


I have a problem with delaying computer's move in a game.

I've found some solutions but they don't work in my case, e.g.

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

I tried to use this with function fire but also to no effects.

What other possibilities there are?


Solution

  • Swift 3

    With GCD:

    let delayInSeconds = 4.0
    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delayInSeconds) {
    
        // here code perfomed with delay
    
    }
    

    or with a timer:

    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

    With 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
    
    })
    

    or with a timer:

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