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
将您带回主线程-这是一种蛮力,最好使用适当的委托人来解决。谢谢,感谢您的建议。