Swift 实时更新 UILabel

Updading UILabel in real time in Swift

我正在尝试更新 queryPedometerDataFromDate(..) 方法处理程序中的 UILabel 文本。 UILabel 的更新会在 20 或 25 秒后反映出来。但我几乎实时看到 println() 输出。有什么办法让它更快吗? 如果我在此处理程序之外更新 UILabel 的文本,那么它会再次实时更新。

        pedoman.queryPedometerDataFromDate(yester, toDate: now) {
        (data:CMPedometerData!, errr:NSError!) -> Void in
        //Below statement take 20 to 30 second to reflect on UILabel
        self.StringSteps.text = data.numberOfSteps.stringValue
        //Below statement prints on Output in real time.
        println("Number of Steps \(data.numberOfSteps)")
    }

您需要在主线程上更新 UILabel。

dispatch_async(dispatch_get_main_queue(), {
self.StringSteps.text = data.numberOfSteps.stringValue
});

您提供给 queryPedometerDataFromDate:toDate:withHandler: 方法的块在串行队列中执行,而不是在主线程中执行。您应该从主线程进行所有 UI 更新。您可以像这样使用 GCD 来完成此操作:

dispatch_async(dispatch_get_main_queue(), {
   self.StringSteps.text = data.numberOfSteps.stringValue
})

Swift 4.2

DispatchQueue.main.async {
self.StringSteps.text = data.numberOfSteps.stringValue}