与GCD同时处理数组项目



大大简化了这个问题,说我有一个由三个图像URL组成的迅速阵列,我想下载这样的信息:

let urls:[String] = [
    "http://acme.com/one.jpeg",
    "http://acme.com/two.jpeg",
    "http://acme.com/three.jpeg",
]
for url in urls {
    downloadImage(url)
}
print("all images downloaded.")

如果我想并行下载所有文件>怎么办?在阅读了有关Swift中的Grand Central Dispatch(GCD(和异步编程后,我仍然不确定如何解决该"问题"。我不想修改数组,我要实现的只是downloadImage(url)任务的并行执行。

预先感谢。

我建议您使用dispatchgroup为此,我不知道您将如何下载图像,但是代码的示例看起来像

    private func downloadAll() {
    let urls:[String] = [
        "http://acme.com/one.jpeg",
        "http://acme.com/two.jpeg",
        "http://acme.com/three.jpeg",
    ]
    let group = DispatchGroup()
    for url in urls {
        group.enter()
        downloadImage(url) {
            group.leave()
        }
    }
    group.notify(queue: .main) {
        print("all images downloaded")
    }
}
func downloadImage(_ url: String, @escaping block: () -> ()) {
    // your code to download
    // in completion block call block()
    // it will call block in for loop to leave the group
}

希望它能帮助您,下载您可以使用SDWebimage框架,在用法中非常容易

最新更新