Swift 来自主线程的递归导致文本字段卡住
我使用递归函数来测试文本字段是否更新。但调用函数时,文本字段冻结,无法编辑。有什么建议吗Swift 来自主线程的递归导致文本字段卡住,swift,swift5,Swift,Swift5,我使用递归函数来测试文本字段是否更新。但调用函数时,文本字段冻结,无法编辑。有什么建议吗 super.viewDidLoad() // Do any additional setup after loading the view. DispatchQueue.global(qos: .default).async { for item in 1...16 {
super.viewDidLoad()
// Do any additional setup after loading the view.
DispatchQueue.global(qos: .default).async {
for item in 1...16 {
sleep(1)
DispatchQueue.main.async {
self.inputTextField.becomeFirstResponder()
testValue(textField: self.inputTextField, item: item)
}
}
}
func testValue(textField: UITextField, item: Int) {
if textField.text == "Enter Data" {
sleep(1)
testValue(textField: textField, item: item)
} else if self.inputTextField.text != "Enter Data" {
let view = self.view.viewWithTag(item)
if let btn = view as? UIButton {
btn.sendActions(for: .touchUpInside)
}
}
}
}
}
也很困惑,因为即使默认文本字段值为“输入数据”,else条件值也会以“不相等”进行计算。所以这件事让我很困惑,如果有任何建议,我将不胜感激。在
testValue(textField:UITextField,item:Int)
中的sleep(1)
已在主线程中执行。。。我很好奇这样做的意义,为什么不使用委托来监视文本字段的变化呢?你真的关心实时验证吗?谢谢你的反馈。据我所知,这里的一切都是在主线程中执行的。当我删除sleep(1)
DispatchQueue时,我会遇到同样的错误。global
正在后台线程上工作,DispatchQueue.main
将您带回主线程-这是一种蛮力,最好使用适当的委托人来解决。谢谢,感谢您的建议。sleep(1)testValue(textField:UITextField,item:Int)中的
已在主线程中执行。。。我很好奇这样做的意义,为什么不使用委托来监视文本字段的变化呢?你真的关心实时验证吗?谢谢你的反馈。据我所知,这里的一切都是在主线程中执行的。当我删除sleep(1)
DispatchQueue时,我会遇到同样的错误。global
正在后台线程上工作,DispatchQueue.main
将您带回主线程-这是一种蛮力,最好使用适当的委托人来解决。谢谢,感谢您的建议。