我试图拥有一个循环遍历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()
}
}
答案 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()
}
})
这将每秒显示一个弹出窗口,并在显示下一个弹出窗口之前将其删除。