iOS Concurrency with GCD & Operations

Sep 12 2023 · Swift 5.8, macOS 13, iOS 16, Xcode 14.3

Part 1: Grand Central Dispatch

09. Challenge: Download a Group of Images

Episode complete

Play next episode

Next
About this episode
Leave a rating/review
See forum comments
Cinema mode Mark complete Download course materials
Previous episode: 08. Wrap an Asynchronous Function Next episode: 10. Use a DispatchSemaphore

Get immediate access to this and 4,000+ other videos and books.

Take your career further with a Kodeco Personal Plan. With unlimited access to over 40+ books and 4,000+ professional videos in a single subscription, it's simply the best investment you can make in your development career.

Learn more Already a subscriber? Sign in.

Heads up... You've reached locked video content where the transcript will be shown as obfuscated text.

Challenge: Download a Group of Images

In the previous exercise, you wrapped asyncAdd to add a group argument. This enabled you to add asyncAdd_Group tasks to a dispatch group, which notified you when all the tasks finished. In this challenge, you’ll wrap URLSession dataTask, then use it to download a group of images.

URLSession.shared.dataTask(with: url) { data, response, error in
  completionHandler(data, response, error)
}.resume()
group.enter()
URLSession.shared.dataTask(...
defer { group.leave() }
completionHandler(data, response, error)  // already written
dataTask_Group(with: url, group: group) { data, _, error in  // don't need response
  if error == nil, let data = data, let image = UIImage(data: data) {
    images.append(image)
  }
print("All done!")
images[0]
PlaygroundPage.current.finishExecution()