Swift循环通过数组之间暂停

我试图有一个函数,将循环通过一个数组的Ints,并为每个项目,根据它的值,弹出一个特定的消息一秒钟或所以,然后让消息消失,然后移动到数组中的下一个项目。我能够弄清楚如何使用DISPATCH为消息消失创建一个“延迟” - 但我仍然终止于所有消息立即弹出。Swift循环通过数组之间暂停

另外,我创建了一个名为“offAll()”的函数,用于关闭所有消息,我试图在for循环结束时使用DISPATCH调用 - 但正如我所说的,它仍然显示所有消息一次。 (我也尝试将DISPATCH语句分别放入每个case语句中,但这似乎也没有帮助。)

仅供参考,我在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()

}

}

回答:

消息显示在一起,因为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()

}

})

这将显示每秒弹出并删除前一个显示下一个之前。

以上是 Swift循环通过数组之间暂停 的全部内容, 来源链接: utcz.com/qa/265706.html

回到顶部