SwiftData is Apple's modern framework for data persistence, designed to store and manage app data easily and efficiently using Swift language features.
Click to reveal answer
beginner
Which Swift attribute marks a class as a model for SwiftData?
The @Model attribute marks a class as a data model that SwiftData can manage and persist.
Click to reveal answer
intermediate
How do you initialize the SwiftData container in your app?
You create a ModelContainer with your model types and pass it to the environment using the .modelContainer() modifier in your SwiftUI app.
Click to reveal answer
intermediate
What is the role of @Environment(\.modelContext) in SwiftData?
@Environment(\.modelContext) provides access to the current data context, allowing you to read and write data within SwiftUI views.
Click to reveal answer
intermediate
Why is SwiftData considered more modern than Core Data?
SwiftData uses Swift language features like property wrappers and integrates seamlessly with SwiftUI, making data persistence simpler and more type-safe compared to Core Data.
Click to reveal answer
Which attribute do you use to define a SwiftData model class?
A@Model
B@Entity
C@Data
D@Persist
✗ Incorrect
The @Model attribute marks a class as a SwiftData model.
How do you provide the SwiftData container to your SwiftUI app?
AUsing .persistenceController() modifier
BUsing .environmentObject() modifier
CUsing .dataStore() modifier
DUsing .modelContainer() modifier
✗ Incorrect
You use the .modelContainer() modifier to inject the SwiftData container into the SwiftUI environment.
What does @Environment(\.modelContext) provide in SwiftUI?
AAccess to the network context
BAccess to the data context for reading and writing
CAccess to the UI theme
DAccess to the file system
✗ Incorrect
@Environment(\.modelContext) gives access to the current SwiftData context for data operations.
Which of these is NOT a benefit of SwiftData over Core Data?
ARequires manual SQL queries
BBetter integration with SwiftUI
CMore type-safe data handling
DSimpler syntax with Swift property wrappers
✗ Incorrect
SwiftData does not require manual SQL queries; it abstracts data persistence.
What is the first step to use SwiftData in your app?
AWrite SQL queries
BCreate a Core Data stack
CDefine your data model with @Model
DImport UIKit
✗ Incorrect
You start by defining your data model classes with the @Model attribute.
Explain how to set up SwiftData persistence in a new SwiftUI app.
Think about the steps from model definition to making data available in views.
You got /4 concepts.
Describe the advantages of using SwiftData compared to older persistence methods like Core Data.
Focus on developer experience and Swift language benefits.
You got /5 concepts.
Practice
(1/5)
1. What is the purpose of marking a class with @Model in SwiftData?
easy
A. It disables saving data for that class.
B. It makes the class visible only to the current view.
C. It tells SwiftData to manage and save instances of that class automatically.
D. It converts the class into a SwiftUI view.
Solution
Step 1: Understand the role of @Model
The @Model attribute marks a class as a data model for SwiftData to manage persistence.
Step 2: Recognize automatic data management
SwiftData automatically saves and tracks changes for classes marked with @Model.
Final Answer:
It tells SwiftData to manage and save instances of that class automatically. -> Option C
Quick Check:
@Model means automatic data management [OK]
Hint: Remember: @Model means SwiftData saves your data class [OK]
Common Mistakes:
Thinking @Model creates a UI component
Assuming @Model disables saving
Confusing @Model with view modifiers
2. Which of the following is the correct way to set up a SwiftData model container in your app's main entry point?
easy
A. let container = ModelContainer(for: MyModel.self)
B. let container = .modelContainer(for: MyModel.self)
C. let container = ModelContainer(for: [MyModel].self)
D. let container = .modelContainer(for: [MyModel].self)
Solution
Step 1: Recall the correct syntax for model container setup
SwiftData uses ModelContainer(for: MyModel.self) to create a container for a single model type.
Step 2: Identify the correct option
let container = ModelContainer(for: MyModel.self) uses the correct constructor syntax.
Final Answer:
let container = ModelContainer(for: MyModel.self) -> Option A
Quick Check:
Model container setup uses ModelContainer(for: Type.self) [OK]
Hint: ModelContainer(for: MyModel.self) [OK]
Common Mistakes:
Using [MyModel].self array syntax incorrectly
Using .modelContainer() which is a view modifier
Forgetting .self after the type
3. Given this SwiftUI view using SwiftData:
struct ContentView: View {
@Environment(\.modelContext) private var context
@Query var items: [Item]
var body: some View {
List(items) { item in
Text(item.name)
}
}
}
What will happen if you add a new Item to context?
medium
A. The new item will be saved but not displayed in the list.
B. The list will not update until the app restarts.
C. The app will crash because @Query cannot detect changes.
D. The list will automatically update to show the new item.
Solution
Step 1: Understand @Query and @Environment(\.modelContext)
@Query fetches data from the model container and updates the view automatically when data changes.
Step 2: Recognize automatic UI updates
Adding a new Item to context triggers the @Query to refresh, updating the list.
Final Answer:
The list will automatically update to show the new item. -> Option D
Quick Check:
@Query updates UI on data change [OK]
Hint: @Query auto-refreshes UI when data changes [OK]
Common Mistakes:
Thinking UI updates only on app restart
Believing @Query is static data
Assuming app crashes on data change
4. You wrote this code but your app crashes at runtime:
@Model
class Task {
var title: String
init(title: String) {
self.title = title
}
}
What is the likely cause of the crash?
medium
A. The class is missing a default initializer for SwiftData.
B. You must mark the class as final when using @Model.
C. The property title must be optional.
D. You cannot use classes with @Model, only structs.
Solution
Step 1: Check SwiftData model requirements
SwiftData requires model classes to have a default initializer or all properties to have default values.
Step 2: Identify missing default initializer
The class has a custom initializer but no default one, causing runtime issues.
Final Answer:
The class is missing a default initializer for SwiftData. -> Option A
Quick Check:
SwiftData models need default initializers [OK]
Hint: Ensure @Model classes have default initializers [OK]
Common Mistakes:
Thinking @Model requires final keyword
Making properties optional unnecessarily
Believing only structs can be @Model
5. You want to create a SwiftData model for a Book with a title and optional author. You also want to fetch all books with a non-empty author in a SwiftUI view. Which code snippet correctly defines the model and query?
hard
A.
@Model
class Book {
var title: String
var author: String
init() { title = ""; author = "" }
}
@Query(filter: #Predicate { $0.author != "" }) var books: [Book]
B.
@Model
class Book {
var title: String = ""
var author: String? = nil
}