我正在使用alamofire和svprogresshud查询API并处理数据。问题是,即使我在主线程中更新UI,更新的结果也会在调度队列完成后出现。 我要做的是在进度栏上显示进度状态,并在循环中不断更新进度状态(浮动)。但是,直到派遣中的所有事情都完成后才出现。我的代码看起来像下面。欢呼
DispatchQueue.global(qos: .userInitiated).async(execute: {
Alamofire.request(queryURL).responseJSON() { response in
//Do something
for i in 0..<100{
//Do lots of things
DispatchQueue.main.async {
SVProgressHUD.showProgress(Float(i/100), status: "Loading...")
}
}
//Dismiss
})
尝试以下代码: -
DispatchQueue.global(qos: .userInitiated).async(execute: {
Alamofire.request(queryURL).responseJSON() { response in
//Do something
for i in 0..<100{
//Do lots of things
DispatchQueue.main.async {
SVProgressHUD.showProgress(Float(i)/100 as Float, status: "Loading...")
}
}
//Dismiss
})
它将显示为....
0.00.010.020.030.040.050.060.070.080.090.10.110.120.130.140.150.160.170.180.190.20.210.220.230.240.250.260.270.280.290.30.310.320.330.340.350.360.370.380.390.40.410.420.430.440.450.460.470.480.490.50.510.520.530.540.550.560.570.580.590.60.610.620.630.640.650.660.670.680.690.70.710.720.730.740.750.760.770.780.790.80.810.820.830.840.850.860.870.880.890.90.910.920.930.940.950.960.970.980.99
有两种类型的线程。您可以在此底部链接上找到更多。UI仅适用于并发
单击此处链接以了解更多
Apple将不允许在线程中更改UI控件。因此,您必须更新UI外部线程。