Main Thread Checker Error: Double to UILabel Fails Swift

Main Thread Checker Error: Double to UILabel Fails Swift

我正在从一个 API 中收集一些数据,然后我会 运行 进行一些计算。这些数字存储为双打,因为我想要小数。计算和所有 运行 顺利,在控制台中获得正确的打印输出,但是我似乎无法让它更新我的 UILabel。我在控制台中收到以下错误(顺便说一句,它构建成功):

Main Thread Checker: UI API called on a background thread: -[UILabel setText:]
PID: 69869, TID: 13575919, Thread name: (none), Queue name: NSOperationQueue 0x113e13690 (QOS: UNSPECIFIED), QoS: 0

这是我的代码和我的计算。这些值通过 API 更新,因此在我进行计算时它们不仅仅是 0:

    @IBOutlet weak var renewableLabel: UILabel!
    
    var hydroValue : Double = 0
    var windValue : Double = 0
    
    var renewables : Double = 0
    var renewPercent : Double = 0

 func calcIndex(){
        
        renewables = windValue + hydroValue
        renewPercent = Double(round(10*((renewables / productionValue) * 100))/10)
        
        //print(productionValue)
        
        print("\(renewPercent) %")
           
        updateLabel()
}

func updateLabel(){
        renewableLabel.text = ("\(renewPercent)")
    }

我尝试在将 Double 发送到 Label 之前将其重新格式化为字符串,但仍然出现 samr 错误。如果我在另一个只有双打的项目中执行上述操作,则 renewableLabel.text = ("\(renewPercent)") 可以正常工作。我不确定 UILable 是否是这里的最佳选择。我很乐意切换 :).

该问题与您的计算或您使用的数值类型无关。

您需要将 UI 更新分派到主线程,正如错误中明确指出的那样。

func updateLabel(){
    DispatchQueue.main.async {
        self.renewableLabel.text = ("\(self.renewPercent)")
    }
}