Swift循环遍历数组,中间有暂停

时间:2017-12-27 14:31:33

标签: arrays swift loops delay dispatch

我试图拥有一个循环遍历Ints数组的函数,并且对于每个项目,根据其值,弹出特定的消息一秒左右,然后让消息消失,并且然后转到数组中的下一个项目。我能够弄清楚如何使用DISPATCH创建一个"延迟"消息消失了 - 但是我仍然会立即弹出所有消息。

另外,我创建了一个名为" offAll()"的函数。关闭所有消息,我试图在for循环结束时使用DISPATCH调用 - 但正如我所说,它仍然会立即显示所有消息。 (我也尝试将DISPATCH语句分别放入每个案例陈述中,但这似乎也无济于事。)

仅供参考,我在XCode中使用Swift 4。谢谢!!

 func popUp(){
    for item in order{
        if item == 0 {
            firstLabel.text = "ME!"
        } else if item == 1 {
            secondLabel.text = "ME!"
        } else if item == 2 {
            thirdLabel.text = "ME!"
        } else {
            fourthLabel.text = "ME!"
        }
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
          self.offAll()
        }

    }

1 个答案:

答案 0 :(得分:2)

消息一起显示,因为for循环不是异步的,并且您没有暂停它。解决方案可能是使用计时器来延迟每条消息。 您可以在任何想要开始显示消息的地方调用此计时器。 我假设订单是一个数组。

    var item = 0
    let popUpTimer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { timer in
        //removes all popups
        self.offAll()
        if item == 0 {
            firstLabel.text = "ME!"
        } else if item == 1 {
            secondLabel.text = "ME!"
        } else if item == 2 {
            thirdLabel.text = "ME!"
        } else {
            fourthLabel.text = "ME!"
        }
        item = item + 1
        if item >= order.count { //not order.count - 1 so the last popup can be removed
            //stops the timer when all popups are shown
            timer.invalidate()
        }
    })

这将每秒显示一个弹出窗口,并在显示下一个弹出窗口之前将其删除。