更新文本字段ui在迅捷的ios

当我使用ios SDK 8的swift时遇到了一个问题

我用callback来获取数据的背景,当数据提取,我想设置一个文本字段值和更新屏幕。

这里是我的代码:

@IBOutlet var txtTest: UITextField! @IBAction func login() { let username = "aaa"; let password = "bbb"; var res = ServiceClient.login(username, password: password){ (res:String, error:String?) -> Void in if(error == nil){ self.txtTest.text = res; } } } 

运行这个代码,数据被正确提取,并且txtTest没有更新,但是当我点击txtTest时,这个值将被显示。 那么有什么办法强制更新用户界面? 或发送消息到UI线程?

当想要在Swift中进行UI更新时,每个人都有同样的问题:不要在任何辅助线程中更新UI。 这意味着任何closures。 由于Swift非常使用闭包,这个问题已经被看到了很多,但并不新鲜。

请参阅Swift更新标签(使用HTML内容)需要1分钟的时间来处理正确的操作。

UIKit不是线程安全的,只能从主线程更新。 下载是在后台线程完成的,你不能从那里更新UI。 尝试:

快3,快4

 DispatchQueue.main.async { self.txtTest.text = "Your text" } 

相关的重复问题,但具体的答案

iOS标签不会使用Swift中的函数更新文本