【问题标题】:How to update uilabel text in response swift 4如何更新uilabel文本以响应swift 4
【发布时间】:2019-08-08 01:54:07
【问题描述】:

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

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

快速 2 的示例: Swift changing text of a label after downloading content of a web page

不工作的代码:

@IBAction func buttonAction(_ sender: Any) {

    let url = URL(string: "https://api.nasa.gov/planetary/apod?date=2005-2-22&api_key=DEMO_KEY")!
    let task = URLSession.shared.dataTask(with: url) { [weak self] (data, response, error) in
        if let data = data,
            let stringData = String(data: data, encoding: .utf8) {
            print("stringData: \(stringData)") // prints every time

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

    task.resume()
}

【问题讨论】:

  • 第一次调用时检查mainLabel是否为nil?
  • mainLabel != 无。它是 IBOutlet

标签: swift closures uilabel swift4 urlsession


【解决方案1】:

试试这个

var labelString : String = "" {
        didSet {
            self.mainLabel.text = labelString
        }
    }

在 buttonAction 中编写以下代码

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

【讨论】:

  • 它适用于模拟器,但有 3-5 秒的延迟。而且不是每次。但为什么?问题中的版本适用于设备,但不适用于模拟器。
猜你喜欢
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多