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
✗ Incorrect
The @State wrapper stores local state inside a SwiftUI view and triggers UI updates when the state changes.
Which property wrapper is used inside ObservableObject classes to notify changes?
A@State
B@EnvironmentObject
C@Binding
D@Published
✗ Incorrect
@Published marks properties inside ObservableObject classes to notify observers when the value changes.
What must a class conform to in order to use @Published effectively with SwiftUI?
AObservableObject
BCodable
CIdentifiable
DView
✗ Incorrect
Classes must conform to ObservableObject to use @Published so SwiftUI views can observe changes.
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
✗ Incorrect
@State variables are for local state inside a single SwiftUI view, not for sharing across views.
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
✗ Incorrect
Use @Published in the model class conforming to ObservableObject and @ObservedObject in the view to observe changes.
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
Step 1: Understand what @State does
@State is used to keep simple, local data inside a SwiftUI view.
Step 2: Recognize its effect on UI
When the @State data changes, SwiftUI automatically updates the view to reflect the new data.
Final Answer:
To store local, simple data inside a view and update the UI when it changes -> Option C
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
Step 1: Identify where @Published can be used
@Published is used inside classes that conform to ObservableObject, not structs.
Step 2: Check syntax correctness
class MyClass { @Published var count: Int = 0 } correctly declares a class with a @Published property and initializes it.
Final Answer:
class MyClass { @Published var count: Int = 0 } -> Option D
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
Step 1: Understand the initial state
The Counter class starts with value = 0. The view shows "Count: 0" initially.
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.
Final Answer:
Count: 2 -> Option B
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
Step 1: Check property initialization
The @Published property text is declared but not initialized, and the init() is empty.
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.
Final Answer:
Missing initial value for @Published property 'text' in Model -> Option A
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
Step 1: Understand data sharing between views
When multiple views need to share and update data, use an ObservableObject class with @Published properties.
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.
Final Answer:
Use @State in the main view and @Published in a shared ObservableObject class -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.