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

这个看似简单的问题让我发疯了…我正在玩SwiftyJSON来抓取远程数据,这里是我在Swift中的ViewController类的一个片段:

override func viewDidLoad() { super.viewDidLoad() self.statusLabel.text = "welcome" RemoteDataManager.getStatusUpdateFromURL { (statusData) -> Void in let json = JSON(data: statusData) self.statusLabel.text = "this does not work" self.statusLabel.text = self.getMostRecentStatusUpdate(json) // also does not work } } 

statusLabel文本被设置为“welcome”,但之后不会改变。 有趣的是,任何我把里面func getMostRecentStatusUpdate(_:)println()打印到控制台正确,即使它来自远程json源(即我知道这个function的作品)。 我的问题是我无法将文本打印到UILabel而不是控制台。 我没有收到任何错误消息。

我还不是很熟悉像MyClass.myMethod { (myData) -> Void in .... }这样的Swift函数,我不明白这里出了什么问题。 有任何想法吗?

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

 override func viewDidLoad() { super.viewDidLoad() self.statusLabel.text = "welcome" RemoteDataManager.getStatusUpdateFromURL { (statusData) -> Void in let json = JSON(data: statusData) dispatch_async(dispatch_get_main_queue()) { self.statusLabel.text = "this does not work" self.statusLabel.text = self.getMostRecentStatusUpdate(json) // also does not work } } }