Bird
Raised Fist0
iOS Swiftmobile~5 mins

Search with searchable modifier in iOS Swift - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the searchable modifier do in SwiftUI?
It adds a search bar to a view, allowing users to type text to filter or find items in a list or other content.
Click to reveal answer
beginner
How do you bind the search text in a SwiftUI view using searchable?
You provide a binding to a @State or other string variable that updates as the user types in the search bar.
Click to reveal answer
intermediate
Can the searchable modifier be added to views other than lists?
Yes, it can be added to many views like VStack or ScrollView to provide a search bar for filtering any content.
Click to reveal answer
beginner
What is a common way to filter a list using the search text in SwiftUI?
Use the search text to filter the array of items with a condition like items.filter { $0.contains(searchText) }.
Click to reveal answer
beginner
Why is it important to use @State for the search text variable?
@State allows the view to update automatically when the search text changes, refreshing the filtered results.
Click to reveal answer
What type of variable should you use to store the search text for the searchable modifier?
AArray
BConstant String
CInteger
D@State String
Which SwiftUI modifier adds a search bar to a view?
Afilter()
Bsearchable()
CsearchBar()
DsearchText()
How do you filter a list of strings named items using the search text searchText?
Aitems.filter { $0.contains(searchText) }
Bitems.map { $0 + searchText }
Citems.sorted()
Ditems.append(searchText)
Can the searchable modifier be used on a VStack?
AYes
BNo
COnly on List
DOnly on Text
What happens when the search text changes in a view using @State?
AThe app crashes
BNothing changes
CThe view updates automatically
DThe keyboard hides
Explain how to add a search bar to a SwiftUI list and filter its items.
Think about how the search text connects to filtering the list.
You got /4 concepts.
    Describe why using @State is important for the search text in a searchable view.
    Consider what happens when the user types in the search bar.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the searchable modifier do in a SwiftUI view?
      easy
      A. Removes all items from the list when typing.
      B. Automatically sorts the list items alphabetically.
      C. Changes the background color of the list.
      D. Adds a search bar to filter content in lists or scroll views.

      Solution

      1. Step 1: Understand the purpose of searchable

        The searchable modifier adds a search bar UI element to a list or scroll view.
      2. Step 2: Identify its effect on content

        It allows users to type text to filter or search through the displayed content.
      3. Final Answer:

        Adds a search bar to filter content in lists or scroll views. -> Option D
      4. Quick Check:

        searchable = search bar added [OK]
      Hint: searchable always adds a search bar UI [OK]
      Common Mistakes:
      • Thinking searchable sorts items automatically
      • Confusing searchable with styling modifiers
      • Assuming searchable removes items without filtering
      2. Which of the following is the correct syntax to add a searchable modifier with a binding to a @State variable named searchText?
      easy
      A. .searchable(searchText)
      B. .searchable($searchText)
      C. .searchable(text: $searchText)
      D. .searchable(text: searchText)

      Solution

      1. Step 1: Recall the searchable syntax

        The searchable modifier requires a binding to a string, written as text: $variable.
      2. Step 2: Match the correct binding syntax

        Using $searchText passes the binding, so the correct syntax is .searchable(text: $searchText).
      3. Final Answer:

        .searchable(text: $searchText) -> Option C
      4. Quick Check:

        Binding uses $ with variable name [OK]
      Hint: Use $ to bind @State variable in searchable [OK]
      Common Mistakes:
      • Omitting the text: label
      • Not using $ for binding
      • Passing variable without binding
      3. Given this SwiftUI code snippet, what will be displayed when the user types "ap" in the search bar?
      struct ContentView: View {
        @State private var searchText = ""
        let fruits = ["Apple", "Banana", "Grape", "Apricot"]
      
        var filteredFruits: [String] {
          if searchText.isEmpty { return fruits }
          return fruits.filter { $0.lowercased().contains(searchText.lowercased()) }
        }
      
        var body: some View {
          List(filteredFruits, id: \.self) { fruit in
            Text(fruit)
          }
          .searchable(text: $searchText)
        }
      }
      medium
      A. ["Apple", "Apricot"]
      B. ["Banana", "Grape"]
      C. ["Apple", "Banana", "Grape", "Apricot"]
      D. Empty list

      Solution

      1. Step 1: Understand filtering logic

        The filter checks if each fruit contains the search text "ap" ignoring case.
      2. Step 2: Apply filter to fruits list

        "Apple" and "Apricot" contain "ap" (case-insensitive), "Banana" and "Grape" do not match exactly.
      3. Final Answer:

        ["Apple", "Apricot"] -> Option A
      4. Quick Check:

        Filter by contains "ap" = Apple, Apricot [OK]
      Hint: Filter checks contains ignoring case [OK]
      Common Mistakes:
      • Including fruits that don't contain "ap"
      • Ignoring case sensitivity
      • Returning full list regardless of search
      4. Identify the error in this SwiftUI code using searchable:
      struct ContentView: View {
        @State var searchText = ""
        let items = ["One", "Two", "Three"]
      
        var filteredItems: [String] {
          items.filter { $0.contains(searchText) }
        }
      
        var body: some View {
          List(filteredItems, id: \.self) { item in
            Text(item)
          }
          .searchable(text: searchText)
        }
      }
      medium
      A. Missing $ to bind searchText in searchable modifier.
      B. filteredItems should be a @State variable.
      C. List requires a ForEach instead of direct array.
      D. searchText should be a constant, not @State.

      Solution

      1. Step 1: Check searchable binding syntax

        The searchable modifier requires a binding, so it must be text: $searchText, not text: searchText.
      2. Step 2: Verify other code parts

        filteredItems is computed correctly, List accepts array with id, and searchText should be @State.
      3. Final Answer:

        Missing $ to bind searchText in searchable modifier. -> Option A
      4. Quick Check:

        Binding needs $ prefix [OK]
      Hint: Always use $ for @State binding in searchable [OK]
      Common Mistakes:
      • Forgetting $ in searchable binding
      • Making filteredItems @State unnecessarily
      • Confusing List requirements
      5. You want to create a searchable list of contacts where typing filters by first or last name. Which code snippet correctly implements this behavior?
      struct Contact: Identifiable {
        let id = UUID()
        let firstName: String
        let lastName: String
      }
      
      struct ContentView: View {
        @State private var searchText = ""
        let contacts = [Contact(firstName: "John", lastName: "Doe"), Contact(firstName: "Jane", lastName: "Smith"), Contact(firstName: "Alice", lastName: "Johnson")]
      
        var filteredContacts: [Contact] {
          if searchText.isEmpty { return contacts }
          return contacts.filter { contact in
            contact.firstName.lowercased().contains(searchText.lowercased()) || contact.lastName.lowercased().contains(searchText.lowercased())
          }
        }
      
        var body: some View {
          List(filteredContacts) { contact in
            Text("\(contact.firstName) \(contact.lastName)")
          }
          .searchable(text: $searchText)
        }
      }
      hard
      A. Filters contacts only by first name and ignores last name.
      B. Filters contacts by first or last name ignoring case and updates list dynamically.
      C. Filters contacts but does not ignore case, so search is case-sensitive.
      D. Does not filter contacts and always shows full list.

      Solution

      1. Step 1: Analyze filtering logic

        The filter checks if either firstName or lastName contains the search text, ignoring case.
      2. Step 2: Confirm UI updates with searchable

        The searchable modifier binds to $searchText, so typing updates the filteredContacts list dynamically.
      3. Final Answer:

        Filters contacts by first or last name ignoring case and updates list dynamically. -> Option B
      4. Quick Check:

        Filter by first or last name, case-insensitive [OK]
      Hint: Filter with OR condition and ignore case for full search [OK]
      Common Mistakes:
      • Filtering only by first name
      • Not using lowercased() causing case sensitivity
      • Forgetting to bind searchText with $
      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