How to program a delay in Swift 3 How to program a delay in Swift 3 ios ios

How to program a delay in Swift 3


After a lot of research, I finally figured this one out.

DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { // Change `2.0` to the desired number of seconds.   // Code you want to be delayed}

This creates the desired "wait" effect in Swift 3 and Swift 4.

Inspired by a part of this answer.


I like one-line notation for GCD, it's more elegant:

    DispatchQueue.main.asyncAfter(deadline: .now() + 42.0) {        // do stuff 42 seconds later    }

Also, in iOS 10 we have new Timer methods, e.g. block initializer:

(so delayed action may be canceled)

    let timer = Timer.scheduledTimer(withTimeInterval: 42.0, repeats: false) { (timer) in        // do stuff 42 seconds later    }

Btw, keep in mind: by default, timer is added to the default run loop mode. It means timer may be frozen when the user is interacting with the UI of your app (for example, when scrolling a UIScrollView)You can solve this issue by adding the timer to the specific run loop mode:

RunLoop.current.add(timer, forMode: .common)

At this blog post you can find more details.


Try the following function implemented in Swift 3.0 and above

func delayWithSeconds(_ seconds: Double, completion: @escaping () -> ()) {    DispatchQueue.main.asyncAfter(deadline: .now() + seconds) {         completion()    }}

Usage

delayWithSeconds(1) {   //Do something}