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语句。