Ios 无法在swift中更改ui标签

Ios 无法在swift中更改ui标签,ios,swift,xcode,parsing,uilabel,Ios,Swift,Xcode,Parsing,Uilabel,我正在尝试制作一个天气应用程序。我遇到的问题是,在解析出数据后,我试图更改UILabel,使其与示例中返回的数据相等 if let weather = item["weather"] as? NSArray{ if let value = weather[0] as? NSDictionary{ if let description = value["description"] as? String{ print(

我正在尝试制作一个天气应用程序。我遇到的问题是,在解析出数据后,我试图更改UILabel,使其与示例中返回的数据相等

if let weather = item["weather"] as? NSArray{
       if let value = weather[0] as? NSDictionary{
          if let description = value["description"] as? String{
                        print(description)
}
我不想打印描述,而是想像这样更改UI标签的内容

conditionlabel.text = description
但我在闭包中对属性“Condition”的错误引用需要显式的“self”,以使捕获语义显式


然而,每次我都试着自我。在前面,它不会打印我的数据,还会发生其他事情。任何帮助都将不胜感激,因为我是新手

我认为您需要在这里使用
self.conditionlabel.text=description
(也就是说,使用
self
是为了
UILabel
而不是
description
——我猜您使用的是
self.description
,它提供了视图控制器的描述。)

编辑: 要克服线程问题,请按如下方式包装代码:

DispatchQueue.main.async { [weak self] in
    self?.conditionlabel.text = description
}

在具有UILabel的控制器中创建可选变量:

var descriptionText: String?
现在,当您解析数据时,为这个变量赋值

if let description = value["description"] as? String{
                    descriptionText = description
}
解析数据后,将此值指定给标签

self.conditionlabel.text = descriptionText

“发生了其他事情”-你能解释到底发生了什么吗?@koen没有更改响应的UI标签,例如(sunny…等),它会更改标签以显示此信息。当我打印出来查看是否可以获得更多信息时,它会在调试器中显示此信息,可选(“”)fire weather watch是应用程序的名称当我进行自我时,我收到此消息“UILabel.text只能从主线程使用”请不要建议
[弱自我]在一个调度队列关闭中,它不会导致保留循环。@ VADAN当然不是这里要考虑的问题。这个问题是一个天气应用程序,它意味着数据在网络上出现。在接收数据之前,视图控制器可能被解散,这将是一个问题。letion处理程序由一些静态URL相关方法捕获。