swiftpausesuspend

How to temporary pause function execution?


I want to make very simple animation by going through emoji one by one

func pickingAnimation() {
        for _ in 1...10 {
            currentEmoji.text = randomEmoji().rawValue 
            //currentEmoji - UILabel
            //randomEmoji() generates a random emoji
        }

Is there any function that adds a temporary pause to function execution, so user could see that emoji are changing? Like wait(1) or something?


Solution

  • Use DispatchQueue.main.asyncAfter and a recursive function call.

    As a basic example, try this in a playground (and watch the console!):

    func printNumbers(current: Int, limit: Int) {
        print(current)
        if current < limit {
            DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                printNumbers(current: current + 1, limit: limit)
            }
        }
    }
    printNumbers(current: 1, limit: 10)
    

    The point is that between the print statements, nothing is happening. We are not waiting, which would be bad (we'd be block the main thread); literally nothing is happening. So if what you do, instead of print, is display something in the interface, it is in fact displayed.