What is the purpose of the ObservableObject protocol in SwiftUI?
It allows a class to announce changes to its data so that SwiftUI views can update automatically when the data changes.
Click to reveal answer
beginner
Which property wrapper is used inside an ObservableObject to mark properties that trigger view updates?
The @Published property wrapper marks properties that, when changed, notify views to refresh.
Click to reveal answer
intermediate
How do you connect an ObservableObject to a SwiftUI view to listen for changes?
Use the @StateObject or @ObservedObject property wrapper in the view to subscribe to the ObservableObject.
Click to reveal answer
beginner
What happens if you update a @Published property inside an ObservableObject?
All SwiftUI views observing that object will automatically refresh to reflect the new data.
Click to reveal answer
intermediate
Can structs conform to ObservableObject protocol? Why or why not?
No, because <code>ObservableObject</code> requires a class type to provide reference semantics and support change notifications.
Click to reveal answer
Which keyword marks a property inside an ObservableObject to notify views when it changes?
A@State
B@Published
C@Binding
D@EnvironmentObject
✗ Incorrect
The @Published property wrapper marks properties that trigger view updates when changed.
Which property wrapper should you use in a SwiftUI view to subscribe to an ObservableObject that you create inside the view?
A@EnvironmentObject
B@ObservedObject
C@StateObject
D@State
✗ Incorrect
@StateObject is used when the view owns the ObservableObject and manages its lifecycle.
What protocol must a class conform to in order to notify SwiftUI views about data changes?
AEquatable
BIdentifiable
CCodable
DObservableObject
✗ Incorrect
ObservableObject protocol allows a class to broadcast changes to its data.
If you want multiple views to share the same ObservableObject instance, which property wrapper is best to use?
A@EnvironmentObject
B@StateObject
C@ObservedObject
D@Published
✗ Incorrect
@EnvironmentObject allows sharing a single ObservableObject instance across many views.
Can a struct conform to ObservableObject protocol?
ANo, because ObservableObject requires a class.
BYes, structs can conform to any protocol.
COnly if it uses @Published properties.
DYes, but it won't notify views.
✗ Incorrect
ObservableObject requires reference semantics provided by classes, so structs cannot conform.
Explain how ObservableObject and @Published work together to update SwiftUI views.
Think about how a class tells views to refresh when its data changes.
You got /4 concepts.
Describe the difference between @StateObject and @ObservedObject when using ObservableObject in SwiftUI views.
Consider who creates and manages the ObservableObject instance.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of the ObservableObject protocol in SwiftUI?
easy
A. To handle user input events
B. To create a new view in SwiftUI
C. To allow a class to notify views when its data changes
D. To manage app navigation between screens
Solution
Step 1: Understand ObservableObject role
The ObservableObject protocol is designed to let a class broadcast changes to its data.
Step 2: Connect data changes to UI updates
When data changes, views observing the object update automatically, keeping UI in sync.
Final Answer:
To allow a class to notify views when its data changes -> Option C
Quick Check:
ObservableObject = Notify views on data change [OK]
Hint: ObservableObject = data change notifier for views [OK]
Common Mistakes:
Confusing ObservableObject with view creation
Thinking it handles user input directly
Assuming it manages navigation
2. Which of the following is the correct way to mark a property inside an ObservableObject class so that changes notify the UI?
easy
A. @State var count: Int = 0
B. @Published var count: Int = 0
C. var count: Int = 0
D. @ObservedObject var count: Int = 0
Solution
Step 1: Identify property wrapper for change notification
Inside an ObservableObject, properties that should notify views must use @Published.
Step 2: Check other options
@State is for views, @ObservedObject is for view properties, and plain var does not notify.
Final Answer:
@Published var count: Int = 0 -> Option B
Quick Check:
Use @Published for ObservableObject properties [OK]
Hint: Use @Published to notify UI from ObservableObject [OK]
Common Mistakes:
Using @State inside ObservableObject class
Forgetting @Published wrapper
Confusing @ObservedObject with property wrapper
3. Given this code snippet, what will be printed when the button is tapped once?
class Counter: ObservableObject {
@Published var count = 0
}
struct ContentView: View {
@StateObject var counter = Counter()
var body: some View {
Button("Tap") {
counter.count += 1
print(counter.count)
}
}
}
medium
A. 1
B. Button tapped
C. 0
D. Compilation error
Solution
Step 1: Understand initial value and increment
The count starts at 0 and increments by 1 when the button is tapped.
Step 2: Check print output after increment
After increment, count is 1, so print outputs 1.
Final Answer:
1 -> Option A
Quick Check:
Increment then print = 1 [OK]
Hint: Increment before print means output is 1 [OK]
Common Mistakes:
Printing before increment
Confusing initial value with updated value
Assuming compilation error due to ObservableObject
4. Identify the error in this ObservableObject class that prevents UI updates:
class TimerData: ObservableObject {
var seconds = 0
func tick() {
seconds += 1
}
}
medium
A. Missing @Published on seconds property
B. Class must inherit from NSObject
C. tick() must be marked as @Published
D. ObservableObject requires struct, not class
Solution
Step 1: Check property change notification
The seconds property is not marked with @Published, so changes won't notify views.
Step 2: Verify other options
ObservableObject does not require NSObject inheritance, methods can't be @Published, and it must be a class.
Final Answer:
Missing @Published on seconds property -> Option A
Quick Check:
@Published missing = no UI update [OK]
Hint: Properties must be @Published to notify UI [OK]
Common Mistakes:
Thinking methods can be @Published
Believing ObservableObject needs NSObject
Confusing class and struct requirements
5. You want to create a SwiftUI view that updates automatically when a user's name changes. Which combination correctly connects the ObservableObject and the view?
class UserData: ObservableObject {
@Published var name: String = ""
}
struct UserView: View {
// What property wrapper and type should be used here?
var userData: UserData
var body: some View {
Text(userData.name)
}
}
hard
A. @StateObject var userData: UserData
B. @State var userData: UserData
C. @Published var userData: UserData
D. @ObservedObject var userData: UserData
Solution
Step 1: Understand property wrappers for ObservableObject in views
Use @ObservedObject when the view receives an ObservableObject from outside and watches it.
Step 2: Differentiate @StateObject and @ObservedObject
@StateObject is for creating and owning the object inside the view; @ObservedObject is for observing an existing object.
Final Answer:
@ObservedObject var userData: UserData -> Option D
Quick Check:
Observe external ObservableObject with @ObservedObject [OK]
Hint: Use @ObservedObject to watch external ObservableObject [OK]
Common Mistakes:
Using @State for ObservableObject
Confusing @StateObject with @ObservedObject
Trying to use @Published in views
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.