通过功能更新UILabel ....有什么我想念的吗?

时间:2017-01-09 03:42:42

标签: ios swift uilabel

我之前提出了类似于此问题的问题,但这个问题更多的是关于Swift的一般语言和基本原理。在下面的代码中,该功能是否应该在技术上起作用并更改标签文本?我现在已经运行了一段时间并且每次都失败了。我确保我的所有商店也正确连接。很抱歉,如果答案很明显,我是Swift的新手。

func changeLabel() {
    DispatchQueue.main.sync(execute: {
        self.testText.text = "YES"
    })
}

override func viewDidLoad() {
    super.viewDidLoad()

    let city:String? = nil
    if city == nil {
        changeLabel()
    }
}

2 个答案:

答案 0 :(得分:2)

viewDidLoad总是从主线程中调用(除非程序员错误地做了 - 而这是另一个问题)。

因此,使用DispatchQueue.main.sync更新标签是没有意义的。事实上,在这种情况下它很糟糕。当已经在主队列上时调用DispatchQueue.main.sync将导致应用程序的用户界面挂起,直到应用程序被杀死。

您有两种选择:

  1. 删除DispatchQueue.main.sync的使用,因为您发布的代码中不需要它。
  2. sync更改为async。这解决了应用用户界面挂起的问题,它还允许您从任何队列调用changeLabel方法并正常工作。

答案 1 :(得分:-2)

请改用:

func changeLabel() {
     DispatchQueue.global().async(execute: {
     print("teste")
     DispatchQueue.main.sync{
        self.testText.text = "YES"
    }})

由于