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