如何更新响应swift 4中的uilabel文本

如何更新响应swift 4中的uilabel文本,swift,closures,uilabel,swift4,urlsession,Swift,Closures,Uilabel,Swift4,Urlsession,我尝试使用服务器响应更新label.text。但标签仅在第二次调用方法后更新。怎么了 dispatch_async(dispatch_get_main_queue())已被弃用。我将其更改为DispatchQueue.main.async,但它不起作用 swift 2的示例: 非工作代码: @iAction func按钮操作(\发送方:任意){ 让url=url(字符串:https://api.nasa.gov/planetary/apod?date=2005-2-22&api_键=演示键“!

我尝试使用服务器响应更新label.text。但标签仅在第二次调用方法后更新。怎么了

dispatch_async(dispatch_get_main_queue())已被弃用。我将其更改为DispatchQueue.main.async,但它不起作用

swift 2的示例:

非工作代码:

@iAction func按钮操作(\发送方:任意){
让url=url(字符串:https://api.nasa.gov/planetary/apod?date=2005-2-22&api_键=演示键“!
让task=URLSession.shared.dataTask(带:url){[weak self](数据、响应、错误)在
如果let data=data,
让stringData=String(数据:数据,编码:.utf8){
打印(“stringData:\(stringData)”//每次打印
DispatchQueue.main.async{
//在第二次调用后更改标签文本。
//?如何在第一次呼叫时更改标签文本???
self?.mainLabel.text=stringData
}
}
}
task.resume()
}
试试这个

var labelString : String = "" {
        didSet {
            self.mainLabel.text = labelString
        }
    }
在按钮操作中写入下面的代码

DispatchQueue.main.async {
        // change label text after second calling.
       // ??? How to change label text at first calling ???
        self?.labelString = stringData
  }

检查第一次呼叫时
mainLabel
是否为零?mainLabel!=无这是Ibotelett在模拟器上工作,但有3-5秒的延迟。不是每次都是。但是为什么呢?问题的版本在设备上工作,但在模拟器上不工作。