Bird
Raised Fist0
iOS Swiftmobile~20 mins

Error handling for network calls in iOS Swift - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Network Error Handling Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ ui_behavior
intermediate
2:00remaining
Handling network error UI update
You make a network call that can fail. Which option correctly updates the UI to show an error message when the call fails?
iOS Swift
func fetchData() {
  networkCall { result in
    switch result {
    case .success(let data):
      self.updateUI(with: data)
    case .failure(let error):
      // What to do here?
    }
  }
}
ADispatchQueue.global().async { self.errorLabel.text = error.localizedDescription }
BDispatchQueue.main.async { self.errorLabel.text = error.localizedDescription }
Cprint(error.localizedDescription)
Dself.errorLabel.text = error.localizedDescription
Attempts:
2 left
💡 Hint
UI updates must happen on the main thread.
🧠 Conceptual
intermediate
1:30remaining
Understanding URLSession error handling
What does the 'error' parameter in URLSession dataTask completion handler represent?
AThe HTTP status code of the response
BThe data returned from the server
CA client-side error such as network failure or request timeout
DAn error returned by the server in the HTTP response body
Attempts:
2 left
💡 Hint
Think about what kind of errors happen before getting a response.
❓ lifecycle
advanced
2:00remaining
Properly cancelling a network call on view disappear
You start a URLSession dataTask in a view controller. What is the best way to cancel the task when the view disappears to avoid memory leaks or unwanted callbacks?
ADo nothing; the system cancels tasks automatically
BSet task to nil inside viewDidDisappear method
CCall task.resume() inside viewWillDisappear method
DCall task.cancel() inside viewWillDisappear method
Attempts:
2 left
💡 Hint
Think about when you want to stop the network call cleanly.
📝 Syntax
advanced
2:30remaining
Correct error handling syntax in async network call
Which option correctly uses Swift's async/await syntax with error handling for a network call?
iOS Swift
func loadData() async {
  do {
    let data = try await fetchData()
    process(data)
  } catch {
    handle(error)
  }
}
Ado { let data = try await fetchData(); process(data) } catch { handle(error) }
Blet data = await fetchData() catch { handle(error) }
Ctry { let data = await fetchData() } catch { handle(error) }
Dlet data = try fetchData() await process(data)
Attempts:
2 left
💡 Hint
Remember the correct placement of try, await, and do-catch blocks.
🔧 Debug
expert
3:00remaining
Diagnosing error message on successful network calls
You notice your app shows an error message even when the network call succeeds. Which option is the most likely cause?
iOS Swift
URLSession.shared.dataTask(with: url) { data, response, error in
  if error != nil {
    print("Error occurred")
  }
  DispatchQueue.main.async {
    self.errorLabel.text = "Failed to load"
  }
}.resume()
AThe errorLabel update is outside the error check, so it always shows failure even if no error
BThe UI update runs regardless of error presence, so errorLabel always shows failure even on success
CThe error check is incorrect; it should be if error == nil
DThe network call is missing .resume() to start the task
Attempts:
2 left
💡 Hint
Look where the UI update code is placed relative to the error check.

Practice

(1/5)
1. What is the main purpose of the error parameter in a network call's completion handler in Swift?
easy
A. To update the UI directly from the background thread
B. To store the data returned from the server
C. To specify the URL of the network request
D. To check if the network request failed and handle the failure

Solution

  1. Step 1: Understand the role of the error parameter

    The error parameter indicates if something went wrong during the network request. Developers check this parameter to detect failures and respond appropriately, like showing an alert.
  2. Final Answer:

    To check if the network request failed and handle the failure -> Option D
  3. Quick Check:

    Error parameter = check failure [OK]
Hint: Error parameter signals failure in network calls [OK]
Common Mistakes:
  • Confusing error with data parameter
  • Trying to update UI directly from background thread
  • Ignoring error and assuming success
2. Which of the following is the correct syntax to check for an error in a Swift network call completion handler?
easy
A. if error == nil { print("Error occurred") }
B. if error != nil { print("Error occurred") }
C. if error = nil { print("Error occurred") }
D. if error != false { print("Error occurred") }

Solution

  1. Step 1: Recall error checking syntax in Swift

    To check if an error exists, use if error != nil. Using != nil means an error was found, so handle it.
  2. Final Answer:

    if error != nil { print("Error occurred") } -> Option B
  3. Quick Check:

    Check error with != nil [OK]
Hint: Use 'if error != nil' to detect errors [OK]
Common Mistakes:
  • Using assignment '=' instead of comparison '=='
  • Checking error == nil to detect error (wrong logic)
  • Comparing error to false instead of nil
3. Consider this Swift code snippet for a network call:
URLSession.shared.dataTask(with: url) { data, response, error in
  if let error = error {
    print("Error: \(error.localizedDescription)")
  } else {
    print("Success")
  }
}.resume()
What will be printed if the network request fails due to no internet connection?
medium
A. Error: The Internet connection appears to be offline.
B. No output
C. Success
D. Crash due to unwrapped nil

Solution

  1. Step 1: Trace the code on network failure

    The code uses optional binding if let error = error which succeeds when error is not nil, printing the localized description like "The Internet connection appears to be offline." for no internet.
  2. Final Answer:

    Error: The Internet connection appears to be offline. -> Option A
  3. Quick Check:

    Error prints localizedDescription [OK]
Hint: Error prints message; success prints 'Success' [OK]
Common Mistakes:
  • Assuming success prints even on error
  • Expecting crash from optional binding
  • Ignoring error and printing nothing
4. This Swift code attempts to handle a network error but has a logic error:
URLSession.shared.dataTask(with: url) { data, response, error in
  if error == nil {
    print("No error")
  } else {
    print(error!.localizedDescription)
  }
}.resume()
What is the likely cause of the logic error?
medium
A. Not calling resume() on the data task
B. Force unwrapping error when it is nil
C. Using error == nil instead of error != nil
D. Printing error.localizedDescription without checking error

Solution

  1. Step 1: Analyze the logic and best practice

    The code checks if error == nil for success first, then handles error in else (safe unwrap). While functional, best practice is to check if error != nil first to explicitly handle failures before success.
  2. Final Answer:

    Using error == nil instead of error != nil -> Option C
  3. Quick Check:

    Error check logic reversed [OK]
Hint: Check error != nil to handle errors safely [OK]
Common Mistakes:
  • Reversing error check logic
  • Force unwrapping error without check
  • Not calling resume() on data task
5. You want to update a label's text after a network call completes. Which is the correct way to handle errors and update the UI safely in Swift?
URLSession.shared.dataTask(with: url) { data, response, error in
  // Handle error and update label
}
hard
A. Check if error != nil, then update label text inside DispatchQueue.main.async block
B. Update label text directly inside the completion handler without dispatching
C. Ignore error and update label text on background thread
D. Use try-catch inside the completion handler to update label

Solution

  1. Step 1: Handle threading and errors for UI updates

    Completion handlers run on background threads, so dispatch UI updates to main. First check if error != nil to handle failure (e.g., update label with error message), using DispatchQueue.main.async.
  2. Final Answer:

    Check if error != nil, then update label text inside DispatchQueue.main.async block -> Option A
  3. Quick Check:

    UI updates on main thread after error check [OK]
Hint: Always update UI on main thread after error check [OK]
Common Mistakes:
  • Updating UI on background thread causing crashes
  • Ignoring error and updating UI blindly
  • Using try-catch incorrectly for async callbacks
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard