我是iOS开发的新手,也是闭包概念的新手。使用情节提要,我创建了一个UIButton
和UILabel
,因此,当我单击按钮时,它会显示一个带有动作的警报,而当我关闭该警报时,标签会增加标签内的数字,但我希望该增量为警报解除后,我使用了闭包的概念,这样就可以延迟标签内数字的增加,如下所示:
class ViewController: UIViewController {
@IBOutlet weak var numberLbl: UILabel!
var count = 1
func updateLabels(){
numberLbl.text = String(count)
count += 1
}
@IBAction func btnPressed(){
let alert = UIAlertController(title: "hello", message: "this is an alert", preferredStyle: .alert)
let action = UIAlertAction(title: "OK", style: .default, handler: { action in
print("incrementing.... ") // it print this text
// in console
self.updateLabels() // but not this line does not work
// but when i reload the app it updates the number label
/// !!!!!!!!
})
alert.addAction(action)
present(alert, animated: true, completion: nil)
}
}
但是发生的事情是,每当我运行模拟器并单击按钮时,警报就会显示并单击将其关闭的操作,但是标签不会增加,直到我触摸模拟器上的某个侧面按钮或在重新加载应用程序后它会增加
我在物理设备上尝试了该方法,但工作正常,但在模拟器上却没有
我在2011年末使用的是Macbook Pro
谢谢
答案 0 :(得分:0)
您在更新计数变量之前更新了UILabel文本
var count : Int = 1 {
didSet {
numberLbl.text = "\(count)"
}
}
func updateLabels() {
count += 1
}
答案 1 :(得分:0)
经过长时间的搜索,我发现这是由于intel HD graphic 3000的macs中存在一个错误,所以这是一个驱动程序错误,而解决方法是执行对我有用的命令
patchValues(id, i) {
let x = (<FormArray>this.addForm.controls['rows']).at(i);
const selectedIngredient = this.ingredients.find(y => y.id == id);
x.patchValue({
unit_price: selectedIngredient.price
});
或根据您的硬件使用1
感谢您的帮助:)
答案 2 :(得分:-1)
您在代码中进行更改的唯一方面是您声明按钮的方式。
@IBAction func btnPressed(_ sender: UIButton)
除此之外,您可能想要尝试清理(Command Shift K)并尝试重建。
除此之外,我仍按原样运行您的代码,并且可以正常运行。