无法更新调度队列内主线程中的 UI swift 3



我正在使用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外部线程。

最新更新