我是初学者,正在使用Xcode(Swift)开发iOS应用。出于某种原因,我可以使用UILabel的属性.text设置文本,但是如果我尝试对其进行更新,则标签将仅显示我设置的最后一个值(??)。例如,这是当我单击名为myButton的按钮并尝试在名为Display的标签中设置文本时执行的代码。结果是,在UILabel保持空白之前,仅显示第四个值(“四个”)(在3个2秒的延迟之后)。真正奇怪的是,如果我删除除第一行(Display.text =“ One”)之外的所有内容,它将显示得很好。好像编译器将删除标签的最后一个属性设置之外的所有内容一样……感谢您的帮助!
@IBAction func myButton(_ sender: Any)
{
Display.text = "One"
sleep(2)
Display.text = "Two"
sleep(2)
Display.text = "Three"
sleep(2)
Display.text = "Four"
}
更新:此代码仅是一个示例,演示了我在实际程序中遇到的问题。 sleep()调用仅用于模拟延迟。问题是我似乎无法两次设置UILabel的文本。在我的代码中,我调用了一个需要花费时间才能执行的函数,因此我想在标签中显示“ Wait ...”,直到完成,然后再在同一标签中显示结果。但是没有运气...
不使用sleep
会阻塞主线程
let arr = ["one","two","three","four"]
var counter = 0
Timer.scheduledTimer(withTimeInterval:2.0, repeats:true) { timer in
self.counter += 1
if counter < self.arr.count {
self.display.text = self.arr[counter]
}
else {
timer.invalidate()
}
}
或使用DispatchQueue.main.asyncAfter
arr.indices.forEach {
DispatchQueue.main.asyncAfter(deadline: .now() + Double( $0 * 2) ) {
self.display.text = self.arr[$0]
}
}