Modern Concurrency: Getting Started

Oct 18 2022 · Swift 5.5, iOS 15, Xcode 13.4

Part 1: Asynchronous Code

06. Additional Error Handling

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: 05. Using AsyncSequence in Views Next episode: 07. Conclusion

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.

Transcript: 06. Additional Error Handling

Your challenge is to handle one more error. What if the server stops while you’re in the live ticker view?

Is your app still running from episode 5? To make sure the prices are updating, tap Live ticker again. In Terminal, press Control-C to stop the server.

In the app, there’s no error message. As far as the app is concerned, the async sequence task completed and its job is done.

The app needs to reset tickerSymbols when the async sequence ends, then navigate back to SymbolListView. Remember to restart your server.

Your challenge is to handle one more error. What if the server stops while you’re in the live ticker view? If the async sequence ends, the for loop in startTicker(_:) exits. So add code after the for loop to set tickerSymbols to an empty array. Remember to use MainActor.

In TickerView, add a view modifier that keeps track of the number of elements in tickerSymbols and dismisses the view if this value resets to 0. Use the presentationMode environment property already included in TickerView.

Good luck!

Welcome back! Hopefully you had success with handling this error. But let’s go over how I did it, and get on the same page.

Reset tickerSymbols array

In LittleJohnModel, in startTicker, below the for loop, I added this code:

await MainActor.run {
  tickerSymbols = []
}

In TickerView, I added this below the task closure:

.onChange(of: model.tickerSymbols.count) { newValue in
  if newValue == 0 {
    presentationMode.wrappedValue.dismiss()
  }
}

Check your server’s running, then build and run, select some stocks, tap Live ticker, then stop your server.

Now the app automatically dismisses the live ticker screen and returns to the symbol list. Remember to restart your server.