Bird
Raised Fist0
Swiftprogramming~5 mins

Built-in property wrappers (@State, @Published) in Swift - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of the @State property wrapper in SwiftUI?
The @State property wrapper is used to declare a source of truth for a view's state. It allows SwiftUI to monitor changes and automatically update the UI when the state changes.
Click to reveal answer
beginner
How does the @Published property wrapper work in Swift?
The @Published property wrapper marks a property so that changes to it will automatically notify any observers, typically used inside ObservableObject classes to update views or other listeners.
Click to reveal answer
beginner
In which type of Swift class is @Published commonly used?
It is commonly used inside classes that conform to ObservableObject, which allows SwiftUI views to observe and react to changes in the data.
Click to reveal answer
beginner
What happens when a @State variable changes in a SwiftUI view?
When a @State variable changes, SwiftUI automatically re-renders the view to reflect the new state, keeping the UI in sync with the data.
Click to reveal answer
intermediate
Can @State be used outside of SwiftUI views?
No, @State is designed specifically for use inside SwiftUI views to manage local state. For shared or external state, other wrappers like @Published and ObservableObject are used.
Click to reveal answer
What does the @State property wrapper do in SwiftUI?
ADefines a constant value
BPublishes changes to external observers
CStores local state and triggers UI updates when changed
DCreates a new SwiftUI view
Which property wrapper is used inside ObservableObject classes to notify changes?
A@State
B@EnvironmentObject
C@Binding
D@Published
What must a class conform to in order to use @Published effectively with SwiftUI?
AObservableObject
BCodable
CIdentifiable
DView
Which of these is true about @State variables?
AThey are used for local state inside a single view
BThey can be shared across multiple views directly
CThey automatically persist data to disk
DThey are used to create bindings to environment values
If you want a SwiftUI view to update when a model changes, which combination is correct?
AUse @State in the model
BUse @Published in an ObservableObject model and @ObservedObject in the view
CUse @Binding in the model
DUse @EnvironmentObject in the model only
Explain how @State and @Published differ in managing data and updating SwiftUI views.
Think about where the data lives and who needs to know about changes.
You got /4 concepts.
    Describe a simple example scenario where you would use @State and another where you would use @Published.
    Consider local UI state versus shared app data.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of the @State property wrapper in SwiftUI?
      easy
      A. To mark properties in a class that notify other objects when changed
      B. To create a constant value that never changes
      C. To store local, simple data inside a view and update the UI when it changes
      D. To handle network requests asynchronously

      Solution

      1. Step 1: Understand what @State does

        @State is used to keep simple, local data inside a SwiftUI view.
      2. Step 2: Recognize its effect on UI

        When the @State data changes, SwiftUI automatically updates the view to reflect the new data.
      3. Final Answer:

        To store local, simple data inside a view and update the UI when it changes -> Option C
      4. Quick Check:

        @State manages local view data = B [OK]
      Hint: Remember: @State is for local view data that changes [OK]
      Common Mistakes:
      • Confusing @State with @Published
      • Thinking @State is for class properties
      • Assuming @State handles network or async tasks
      2. Which of the following is the correct way to declare a @Published property inside a Swift class?
      easy
      A. struct MyStruct { @State var count: Int = 0 }
      B. struct MyStruct { @Published var count: Int = 0 }
      C. class MyClass { @State var count: Int = 0 }
      D. class MyClass { @Published var count: Int = 0 }

      Solution

      1. Step 1: Identify where @Published can be used

        @Published is used inside classes that conform to ObservableObject, not structs.
      2. Step 2: Check syntax correctness

        class MyClass { @Published var count: Int = 0 } correctly declares a class with a @Published property and initializes it.
      3. Final Answer:

        class MyClass { @Published var count: Int = 0 } -> Option D
      4. Quick Check:

        @Published used in classes = A [OK]
      Hint: Use @Published only inside classes, not structs [OK]
      Common Mistakes:
      • Using @Published in structs
      • Confusing @State with @Published
      • Missing var keyword or initialization
      3. Consider the following SwiftUI code snippet:
      class Counter: ObservableObject {
          @Published var value = 0
      }
      
      struct ContentView: View {
          @StateObject var counter = Counter()
          var body: some View {
              VStack {
                  Text("Count: \(counter.value)")
                  Button("Increment") {
                      counter.value += 1
                  }
              }
          }
      }
      What will be displayed after tapping the "Increment" button twice?
      medium
      A. Count: 0
      B. Count: 2
      C. Count: 1
      D. Count: 3

      Solution

      1. Step 1: Understand the initial state

        The Counter class starts with value = 0. The view shows "Count: 0" initially.
      2. Step 2: Analyze button action and updates

        Each tap on "Increment" increases counter.value by 1. After two taps, value becomes 2, and the UI updates automatically.
      3. Final Answer:

        Count: 2 -> Option B
      4. Quick Check:

        2 increments update value to 2 [OK]
      Hint: Each button tap adds 1; count updates automatically [OK]
      Common Mistakes:
      • Forgetting @Published triggers UI update
      • Assuming @StateObject resets value
      • Counting taps incorrectly
      4. Identify the error in this SwiftUI code snippet:
      class Model: ObservableObject {
          @Published var text: String
          init() {}
      }
      
      struct ViewContent: View {
          @StateObject var model = Model()
          var body: some View {
              Text(model.text)
          }
      }
      medium
      A. Missing initial value for @Published property 'text' in Model
      B. Cannot use @StateObject with ObservableObject classes
      C. Text view cannot display a String property
      D. Model class should be a struct

      Solution

      1. Step 1: Check property initialization

        The @Published property text is declared but not initialized, and the init() is empty.
      2. Step 2: Understand Swift requirement for properties

        All non-optional properties must have an initial value or be initialized in the constructor. Here, text lacks both.
      3. Final Answer:

        Missing initial value for @Published property 'text' in Model -> Option A
      4. Quick Check:

        Uninitialized property causes error = A [OK]
      Hint: Always initialize @Published properties or provide init values [OK]
      Common Mistakes:
      • Assuming @StateObject can't be used with ObservableObject
      • Thinking Text can't display String
      • Believing Model must be a struct
      5. You want to create a SwiftUI app where a view shows a user's name that can be edited in a separate view. Which combination of property wrappers should you use to ensure the UI updates correctly when the name changes?
      hard
      A. Use @State in the main view and @Published in a shared ObservableObject class
      B. Use @Published in both views
      C. Use @State in both views
      D. Use @StateObject in the editing view only

      Solution

      1. Step 1: Understand data sharing between views

        When multiple views need to share and update data, use an ObservableObject class with @Published properties.
      2. Step 2: Use @State for local view data and @Published for shared data

        The main view can use @State for local state, but the shared user name should be in a class marked with @Published to notify changes.
      3. Final Answer:

        Use @State in the main view and @Published in a shared ObservableObject class -> Option A
      4. Quick Check:

        Shared data uses @Published; local uses @State [OK]
      Hint: Shared data needs @Published; local view data uses @State [OK]
      Common Mistakes:
      • Using @State only for shared data
      • Using @Published in structs or views directly
      • Not using ObservableObject for shared data
      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