Web请求完成后,我将调用以下函数enableEndButton()

func enableEndButton() {
    print("Start")
    buttonState = true
    go_button.setBackgroundImage(UIImage(named: "stop.png"), for: .normal)
    go_button.setTitle("Stop", for: .normal)
    print("Done")
}

输出了两个打印件,但是直到我点击它按钮才改变。我怎样才能立即做到这一点?

从dataTask内部按以下方式调用此函数:
let task = URLSession.shared.dataTask(with: url){
            data,response,error in
            if error != nil {
                print(error!)
            } else {
                weather_condition = self.parseWeatherJSON(weatherJSON: data!)
                //do something with weather_condition
                self.enableEndButton()

最佳答案

尝试在Dispatch中的URLSession完成中包装对enableEndButton的调用

DispatchQueue.main.async {
    self.enableEndButton()
}

编辑:

为了清楚起见,由于URLSessions在后台线程上运行,并且UI更新必须在主线程上完成,因此您需要将其显式分派到主线程,但是不需要在主线程上运行log语句。

10-07 19:41