Bird
Raised Fist0
iOS Swiftmobile~5 mins

Empty state handling in iOS Swift

Choose your learning style10 modes available
Introduction

Empty state handling shows a friendly message or image when there is no data to display. It helps users understand what to do next instead of seeing a blank screen.

When a list or table has no items to show yet.
When a search returns no results.
When a user has not added any content or data.
When an app feature is temporarily unavailable or empty.
When waiting for data to load but nothing is ready to display.
Syntax
iOS Swift
if dataArray.isEmpty {
    // Show empty state view
} else {
    // Show data list view
}

Check if your data source is empty using isEmpty.

Display a special view or message to guide the user when empty.

Examples
Show or hide a label depending on whether the items array is empty.
iOS Swift
if items.isEmpty {
    emptyLabel.isHidden = false
} else {
    emptyLabel.isHidden = true
}
Set a custom empty view as the background of a table when there are no items.
iOS Swift
tableView.backgroundView = items.isEmpty ? emptyView : nil
Use guard to exit early and show empty state if data is empty.
iOS Swift
guard !data.isEmpty else {
    showEmptyState()
    return
}
Sample App

This example shows a table view that displays a list of items. If the list is empty, it hides the table and shows a friendly message label in the center.

iOS Swift
import UIKit

class EmptyStateViewController: UIViewController, UITableViewDataSource {
    let tableView = UITableView()
    let emptyLabel = UILabel()
    var items: [String] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white

        emptyLabel.text = "No items found. Please add some."
        emptyLabel.textAlignment = .center
        emptyLabel.textColor = .gray
        emptyLabel.translatesAutoresizingMaskIntoConstraints = false

        tableView.dataSource = self
        tableView.translatesAutoresizingMaskIntoConstraints = false

        view.addSubview(tableView)
        view.addSubview(emptyLabel)

        NSLayoutConstraint.activate([
            tableView.topAnchor.constraint(equalTo: view.topAnchor),
            tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),

            emptyLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            emptyLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor)
        ])

        updateUI()
    }

    func updateUI() {
        if items.isEmpty {
            tableView.isHidden = true
            emptyLabel.isHidden = false
        } else {
            tableView.isHidden = false
            emptyLabel.isHidden = true
        }
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return items.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
        cell.textLabel?.text = items[indexPath.row]
        return cell
    }
}
OutputSuccess
Important Notes

Always provide a clear message or image to help users understand the empty state.

Consider adding a button or action to help users add data or refresh.

Keep empty state UI simple and visually distinct from normal content.

Summary

Empty state handling improves user experience by showing helpful messages when no data is available.

Use isEmpty to check data and toggle views accordingly.

Design empty states to guide users on what to do next.

Practice

(1/5)
1. What is the main purpose of handling an empty state in an iOS app?
easy
A. To hide the entire screen without any message
B. To crash the app when data is missing
C. To show a friendly message when there is no data to display
D. To load data repeatedly until available

Solution

  1. Step 1: Understand empty state concept

    Empty state means no data is available to show in the UI.
  2. Step 2: Purpose of empty state handling

    It improves user experience by showing a helpful message or guide instead of a blank screen.
  3. Final Answer:

    To show a friendly message when there is no data to display -> Option C
  4. Quick Check:

    Empty state = friendly message [OK]
Hint: Empty state means no data, so show a message [OK]
Common Mistakes:
  • Ignoring empty data and showing blank screen
  • Crashing app when data is empty
  • Reloading data endlessly without message
2. Which Swift code snippet correctly checks if an array named items is empty?
easy
A. if items.isEmpty {}
B. if items.length == 0 {}
C. if items == nil {}
D. if items.count > 0 {}

Solution

  1. Step 1: Identify correct Swift property for empty check

    Swift arrays have an isEmpty property to check if they contain no elements.
  2. Step 2: Compare options

    if items.isEmpty {} uses items.isEmpty, which is the recommended and clear way to check emptiness.
  3. Final Answer:

    if items.isEmpty {} -> Option A
  4. Quick Check:

    Use isEmpty to check empty array [OK]
Hint: Use isEmpty property for arrays in Swift [OK]
Common Mistakes:
  • Using count > 0 (checks non-empty)
  • Checking items == nil (array is not optional)
  • Using length property which does not exist for arrays
3. Given this Swift code, what will be the output when items is empty?
let items: [String] = []
if items.isEmpty {
  print("No items found")
} else {
  print("Items available")
}
medium
A. No items found
B. Items available
C. Nothing is printed
D. Runtime error

Solution

  1. Step 1: Check the array content

    The array items is empty as it has no elements.
  2. Step 2: Evaluate the if condition

    The condition items.isEmpty is true, so the first print statement runs.
  3. Final Answer:

    No items found -> Option A
  4. Quick Check:

    Empty array triggers "No items found" [OK]
Hint: Empty array triggers isEmpty true branch [OK]
Common Mistakes:
  • Assuming else branch runs for empty array
  • Expecting no output instead of print
  • Thinking code crashes on empty array
4. Identify the error in this Swift code for empty state handling:
var data: [String]?
if data.isEmpty {
  print("No data")
}
medium
A. Using var instead of let causes error
B. data is optional, so isEmpty cannot be called directly
C. Missing else block for non-empty data
D. No error, code is correct

Solution

  1. Step 1: Analyze variable type

    Variable data is an optional array ([String]?), meaning it can be nil.
  2. Step 2: Check method call on optional

    You cannot call isEmpty directly on an optional without unwrapping it first.
  3. Final Answer:

    data is optional, so isEmpty cannot be called directly -> Option B
  4. Quick Check:

    Optional must be unwrapped before isEmpty [OK]
Hint: Optional arrays need unwrapping before isEmpty [OK]
Common Mistakes:
  • Calling isEmpty directly on optional causes compile error
  • Ignoring optional and assuming non-optional
  • Thinking var vs let affects isEmpty usage
5. You want to show a label with text "No messages" only when the messages array is empty. Which SwiftUI code correctly handles this empty state?
hard
A. if messages.count > 0 { Text("No messages") } else { List(messages, id: \.self) { Text($0) } }
B. List(messages, id: \.self) { Text($0) } always shows, no empty state
C. Text(messages.isEmpty ? "No messages" : "")
D. if messages.isEmpty { Text("No messages") } else { List(messages, id: \.self) { Text($0) } }

Solution

  1. Step 1: Understand the requirement

    Show "No messages" label only when messages array is empty, otherwise show the list.
  2. Step 2: Evaluate options

    if messages.isEmpty { Text("No messages") } else { List(messages, id: \.self) { Text($0) } } uses if messages.isEmpty to conditionally show the label or the list, which is correct.
  3. Step 3: Check other options

    if messages.count > 0 { Text("No messages") } else { List(messages, id: \.self) { Text($0) } } reverses the condition incorrectly. Text(messages.isEmpty ? "No messages" : "") shows empty text instead of list. List(messages, id: \.self) { Text($0) } always shows, no empty state never shows empty state.
  4. Final Answer:

    if messages.isEmpty { Text("No messages") } else { List(messages, id: \.self) { Text($0) } } -> Option D
  5. Quick Check:

    Use if isEmpty to toggle empty state UI [OK]
Hint: Use if isEmpty to show empty state or data list [OK]
Common Mistakes:
  • Reversing the condition logic
  • Showing empty text instead of list
  • Not handling empty state at all
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