更改UILabel文本有延迟,但为什么?

在我的应用程序中,我想设置一个UILabel的文本。 文本来自JSON对象。 我将我的UILabel添加到我的故事板,设置IBOutlet并调用我的asynchronous方法来获取我的JSON对象。 在响应方法中,我设置了UILabel的文本。 但文本更改需要几秒钟。 当响应来到我打印到控制台。 在那里我可以看到,延迟不是来自asynchronous方法。 响应来了,我可以在控制台中看到它。 等待几秒钟比UIlabel更改。 我不明白这个行为,是否有一个技巧立即刷新UIlabel

一些代码:

 @IBOutlet weak var label_news: UILabel!; override func viewDidLoad() { super.viewDidLoad() self.label_news.text = "CHANGE"; rcall.GetNews_GET_NewsResponse_0(self.NewsResponseHandler); } func NewsResponseHandler(resp:NewsResponse!){ self.label_news.text = resp.NewsText; println(resp.NewsText); } 

对不起,如果这是一个初学者的问题,迅速和故事板对我来说是全新的。

最好的祝福

就像Rob在评论中所说的那样,所有的UI改变都需要在主线程中完成。 我还没有在Swift中实现它,但是Objective-C和我所假设的Swift就在下面。

Objective-C的

 dispatch_async(dispatch_get_main_queue(), ^{ self.label_news.text = resp.NewsText; }); 

迅速:

 dispatch_async(dispatch_get_main_queue()) { self.label_news.text = resp.NewsText; } 

c_rath的回答是正确的。 在swift 3语法被改变(又一次)到

 DispatchQueue.main.async { self. label_news?.text = resp.NewsText }