Bird
Raised Fist0
iOS Swiftmobile~5 mins

Picker and DatePicker in iOS Swift - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a UIPickerView used for in iOS development?
A UIPickerView lets users select a value from a list by spinning a wheel-like interface. It's like choosing an option from a rotating menu.
Click to reveal answer
beginner
How does UIDatePicker help users in an app?
UIDatePicker lets users pick dates and times easily using a familiar scrolling wheel or calendar style. It simplifies entering date/time information.
Click to reveal answer
intermediate
Which protocol must a class conform to for providing data to a UIPickerView?
The class must conform to <code>UIPickerViewDataSource</code> to provide the number of components and rows, and <code>UIPickerViewDelegate</code> to provide the content and handle selection.
Click to reveal answer
intermediate
What property of UIDatePicker controls whether it shows date, time, or both?
The datePickerMode property controls the display mode. It can be set to .date, .time, or .dateAndTime.
Click to reveal answer
intermediate
How can you respond when a user changes the selected value in a UIPickerView?
Implement the delegate method pickerView(_:didSelectRow:inComponent:). This method is called whenever the user picks a new row.
Click to reveal answer
Which method provides the number of rows in a UIPickerView component?
ApickerView(_:didSelectRow:inComponent:)
BpickerView(_:titleForRow:forComponent:)
CpickerView(_:numberOfRowsInComponent:)
DnumberOfComponents(in:)
What property of UIDatePicker sets it to show only time?
Amode = .date
Bmode = .dateAndTime
CpickerMode = .time
DdatePickerMode = .time
Which delegate method is called when a user selects a new row in UIPickerView?
ApickerView(_:didSelectRow:inComponent:)
BpickerView(_:titleForRow:forComponent:)
CpickerView(_:numberOfRowsInComponent:)
DpickerView(_:viewForRow:forComponent:reusing:)
How many components does a basic UIPickerView usually have?
AThree
BOne
CTwo
DZero
Which class is used to let users pick dates and times in iOS?
AUIDatePicker
BUIPickerView
CUITableView
DUICollectionView
Explain how to set up a UIPickerView to show a list of options and respond when the user picks one.
Think about how you tell the picker what to show and how to react when the user spins the wheel.
You got /4 concepts.
    Describe how to configure a UIDatePicker to let users pick only a date, and how to get the selected date.
    Focus on the mode property and how to listen for changes.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the primary purpose of a Picker in SwiftUI?
      easy
      A. To input text from the keyboard
      B. To display a calendar view for date selection
      C. To let users select a value from a list of options
      D. To show an alert message

      Solution

      1. Step 1: Understand Picker functionality

        A Picker is designed to let users choose from multiple options easily.
      2. Step 2: Compare with other UI elements

        DatePicker is for dates, TextField is for text input, Alert is for messages.
      3. Final Answer:

        To let users select a value from a list of options -> Option C
      4. Quick Check:

        Picker = select from list [OK]
      Hint: Picker = choose from list, DatePicker = choose date [OK]
      Common Mistakes:
      • Confusing Picker with DatePicker
      • Thinking Picker inputs text
      • Assuming Picker shows alerts
      2. Which of the following is the correct syntax to create a simple Picker in SwiftUI?
      easy
      A. Picker { Text("One") } selection: $choice label: Text("Select")
      B. Picker(selection: $choice) { Text("One") } label: { Text("Select") }
      C. Picker(label: Text("Select"), selection: $choice) { Text("One") }
      D. Picker(selection: choice) { Text("One") } label: Text("Select")

      Solution

      1. Step 1: Recall Picker initializer syntax

        The correct syntax uses named parameters: selection binding first, then content closure, then label closure.
      2. Step 2: Check each option

        Picker(selection: $choice) { Text("One") } label: { Text("Select") } matches the correct syntax with $choice binding and label closure.
      3. Final Answer:

        Picker(selection: $choice) { Text("One") } label: { Text("Select") } -> Option B
      4. Quick Check:

        Picker syntax = selection: $var, content, label [OK]
      Hint: Picker needs selection binding with $ and label closure [OK]
      Common Mistakes:
      • Omitting $ for binding
      • Wrong parameter order
      • Using non-closure label
      3. Given this SwiftUI code snippet, what will be displayed when the user selects "Banana"?
      struct ContentView: View {
        @State private var fruit = "Apple"
        var fruits = ["Apple", "Banana", "Cherry"]
      
        var body: some View {
          VStack {
            Picker("Select Fruit", selection: $fruit) {
              ForEach(fruits, id: \.self) { fruit in
                Text(fruit)
              }
            }
            Text("You chose: \(fruit)")
          }
        }
      }
      medium
      A. You chose: Banana
      B. You chose: "" (empty string)
      C. You chose: Cherry
      D. You chose: Apple

      Solution

      1. Step 1: Understand state binding in Picker

        The Picker binds to @State variable 'fruit', updating it when user selects an option.
      2. Step 2: User selects "Banana"

        The state variable 'fruit' changes to "Banana", so the Text below shows "You chose: Banana".
      3. Final Answer:

        You chose: Banana -> Option A
      4. Quick Check:

        Picker selection updates state = displayed text [OK]
      Hint: Picker updates bound state, Text shows updated value [OK]
      Common Mistakes:
      • Ignoring state update on selection
      • Confusing initial value with selected value
      • Not using id: \.self in ForEach
      4. Identify the error in this DatePicker code snippet:
      @State private var selectedDate = Date()
      
      var body: some View {
        DatePicker("Pick a date", selection: selectedDate, displayedComponents: .date)
      }
      medium
      A. DatePicker cannot display only date component
      B. selectedDate must be a String, not Date
      C. Label parameter must be omitted
      D. Missing $ before selectedDate in selection binding

      Solution

      1. Step 1: Check binding syntax for DatePicker

        The selection parameter requires a binding, so it must be $selectedDate, not selectedDate.
      2. Step 2: Verify other parameters

        Displaying only date is valid, label is required, and selectedDate is correctly a Date type.
      3. Final Answer:

        Missing $ before selectedDate in selection binding -> Option D
      4. Quick Check:

        Binding needs $ prefix [OK]
      Hint: Always use $ for binding state variables [OK]
      Common Mistakes:
      • Forgetting $ in binding
      • Using wrong data type for selection
      • Misunderstanding displayedComponents usage
      5. You want to create a SwiftUI view where users pick a time and a fruit from a list. Which code snippet correctly combines a DatePicker for time and a Picker for fruits with state variables?
      hard
      A. struct ContentView: View { @State private var time = Date() @State private var fruit = "Apple" let fruits = ["Apple", "Banana"] var body: some View { VStack { DatePicker(selection: $time, displayedComponents: .hourAndMinute) { Text("Select Time") } Picker(selection: $fruit) { ForEach(fruits, id: \.self) { Text($0) } } label: { Text("Select Fruit") } } } }
      B. struct ContentView: View { @State private var time = Date() @State private var fruit = "Apple" let fruits = ["Apple", "Banana"] var body: some View { VStack { DatePicker("Select Time", selection: time, displayedComponents: .hourAndMinute) Picker("Select Fruit", selection: fruit) { ForEach(fruits, id: \.self) { Text($0) } } } } }
      C. struct ContentView: View { @State private var time = Date() @State private var fruit = "Apple" let fruits = ["Apple", "Banana"] var body: some View { VStack { DatePicker("Select Time", selection: time, displayedComponents: .hourAndMinute) Picker("Select Fruit", selection: $fruit) { ForEach(fruits, id: \.self) { Text($0) } } } } }
      D. struct ContentView: View { @State private var time = Date() @State private var fruit = "Apple" let fruits = ["Apple", "Banana"] var body: some View { VStack { DatePicker("Select Time", selection: $time) Picker("Select Fruit", selection: $fruit) { ForEach(fruits, id: \.self) { Text($0) } } } } }

      Solution

      1. Step 1: Check DatePicker syntax with label closure

        struct ContentView: View { @State private var time = Date() @State private var fruit = "Apple" let fruits = ["Apple", "Banana"] var body: some View { VStack { DatePicker(selection: $time, displayedComponents: .hourAndMinute) { Text("Select Time") } Picker(selection: $fruit) { ForEach(fruits, id: \.self) { Text($0) } } label: { Text("Select Fruit") } } } } uses DatePicker with selection binding and label closure, which is valid syntax.
      2. Step 2: Check Picker syntax with label closure

        Picker in struct ContentView: View { @State private var time = Date() @State private var fruit = "Apple" let fruits = ["Apple", "Banana"] var body: some View { VStack { DatePicker(selection: $time, displayedComponents: .hourAndMinute) { Text("Select Time") } Picker(selection: $fruit) { ForEach(fruits, id: \.self) { Text($0) } } label: { Text("Select Fruit") } } } } uses selection binding and label closure correctly, with ForEach and id: \.self.
      3. Step 3: Verify other options

        struct ContentView: View { @State private var time = Date() @State private var fruit = "Apple" let fruits = ["Apple", "Banana"] var body: some View { VStack { DatePicker("Select Time", selection: time, displayedComponents: .hourAndMinute) Picker("Select Fruit", selection: $fruit) { ForEach(fruits, id: \.self) { Text($0) } } } } } lacks $ for DatePicker selection binding, struct ContentView: View { @State private var time = Date() @State private var fruit = "Apple" let fruits = ["Apple", "Banana"] var body: some View { VStack { DatePicker("Select Time", selection: time, displayedComponents: .hourAndMinute) Picker("Select Fruit", selection: fruit) { ForEach(fruits, id: \.self) { Text($0) } } } } } lacks $ for bindings, struct ContentView: View { @State private var time = Date() @State private var fruit = "Apple" let fruits = ["Apple", "Banana"] var body: some View { VStack { DatePicker("Select Time", selection: $time) Picker("Select Fruit", selection: $fruit) { ForEach(fruits, id: \.self) { Text($0) } } } } } misses displayedComponents for time.
      4. Final Answer:

        The code using selection-first initializers with label closures -> Option A
      5. Quick Check:

        Use bindings with $ and label closures for both controls [OK]
      Hint: Use $ for bindings and label closures for Picker and DatePicker [OK]
      Common Mistakes:
      • Omitting $ in bindings
      • Missing label closures
      • Not specifying displayedComponents for time
      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