如何在循环结束后调用函数?

时间:2017-03-29 17:38:54

标签: ios swift uitableview loops tableview

目前,我们有一个函数的一部分,在收集JSON数据并将其分配给数据对象之后。然后,我们遍历数据对象的图像数据值以更新图像视图。循环完成后,我们重新加载tableview。发生的问题是在每个单个对象更新后,tableview正在重新加载,从而产生闪烁和其他视觉错误。如果在所有图像数据更新后可以加载tableview,那就更好了。以下是代码的一部分:

  if let extraImages = self.profileData?.images{

    let extraMovieImages = extraImages.images
    for image in extraMovieImages {
      self.updateImage(ImageType: DownloadPic.personal, ImageString: image.filePath, completion: {_ in

        DispatchQueue.main.async {
          self.TableView.reloadData()
        }
      })
    }
  }

2 个答案:

答案 0 :(得分:3)

在循环之前创建一个变量:

let expectedCount = extraMovieImages.count

然后在完成块中将其计数,当它变为0时,重新加载。

另一个想法是,如果您知道每个图像所在的行,只需重新加载该行,而不是整个表。

答案 1 :(得分:3)

你应该使用DispatchGroup

let group = DispatchGroup()
for image in extraMovieImages {
    group.enter()
    self.updateImage(ImageType: DownloadPic.personal, ImageString: image.filePath, completion: {_ in
        group.leave()
    })
}
group.notify(queue: DispatchQueue.main) {
     self.TableView.reloadData()
}