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

iOS label does not update text with function in Swift

这个看似简单的问题让我发疯...我正在使用 SwiftyJSON 来获取远程数据,这是我在 ViewController class 中的片段 Swift:

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 源(即我知道此功能有效)。我的问题是我无法将文本打印到 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
        }
    }
}