Это довольно упрощенный способ сделать это, но:
func didFinishLoadingImages(_ images: [String: UIImage]) {
print(images)
PlaygroundPage.current.needsIndefiniteExecution = false
}
let images = ["http://www.a.pl/1.jpg", "http://www.a.pl/2.jpg", "http://www.a.pl/3.jpg"]
var downloadedImages = [String: UIImage]()
let session = URLSession.shared
var downloadsRemaining = images.count
for imagePath in images {
guard let url = URL(string: imagePath) else {
downloadsRemaining -= 1
continue
}
session.dataTask(with: url) { (data, _, _) in
var image: UIImage?
if let imageData = data {
// Create the image in the background thread to avoid UI performance issues
image = UIImage(data: imageData)
}
DispatchQueue.main.async {
downloadedImages[imagePath] = image
downloadsRemaining -= 1
if downloadsRemaining == 0 {
didFinishLoadingImages(downloadedImages)
}
}
}
.resume()
}