Within the earlier tutorial, I’ve walked you thru the fundamentals of SwiftData, a brand new framework launched in iOS 17 as a substitute for Core Knowledge. You probably have adopted that tutorial, you must now be conversant in utilizing SwiftData to save lots of and handle knowledge in a database. The built-in @Mannequin
macro and the @Question
macro drastically simplify the method of defining knowledge mannequin and retrieving information from the database, making it extraordinarily straightforward for builders to deal with persistent knowledge.
The Preview function in SwiftUI is extremely helpful because it permits builders to immediately visualize the app’s person interface with out the necessity to launch the simulator. Nevertheless, utilizing SwiftData with SwiftUI Preview requires some extra steps. On this tutorial, we’ll discover learn how to combine SwiftData with SwiftUI Preview successfully.
Notice: In the event you haven’t learn the SwiftData tutorial, I extremely advocate checking it out first, as this tutorial references a few of the supplies lined in that tutorial.
Revisiting the Knowledge Mannequin and SwiftData
Within the earlier instance, we have now constructed a mannequin class for ToDoItem
like this:
import Basis
import SwiftData
@Mannequin class ToDoItem: Identifiable {
var id: UUID
var identify: String
var isComplete: Bool
init(id: UUID = UUID(), identify: String = "", isComplete: Bool = false) {
self.id = id
self.identify = identify
self.isComplete = isComplete
}
}
SwiftData simplifies the method of defining a schema utilizing code. You solely must mark the mannequin class with the @Mannequin
 macro. SwiftData will then mechanically allow persistence for the info class.
To be able to drive the info operations (like replace, insert, learn, and delete), we additionally must arrange the mannequin container. Within the ToDoDemoAppApp.swift
, we have now hooked up the modelContainer
modifier like under:
struct ToDoDemoAppApp: App {
var physique: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(for: ToDoItem.self)
}
}
This configuration is actually all you want earlier than beginning to work with SwiftData.
Preview with SwiftData and In-memory Container
Within the Todo app demo, we have now a ContentView
that hundreds and shows the to-do merchandise within the record view. Right here is the pattern code:
struct ContentView: View {
@Surroundings(.modelContext) personal var modelContext
@Question var todoItems: [ToDoItem]
var physique: some View {
NavigationStack {
Checklist {
ForEach(todoItems) { todoItem in
HStack {
Textual content(todoItem.identify)
Spacer()
if todoItem.isComplete {
Picture(systemName: "checkmark")
}
}
}
}
.navigationTitle("To Do Checklist")
}
}
}
You may make the preview work by writing the preview code like this:
#Preview {
ContentView()
.modelContainer(for: ToDoItem.self)
}
Nevertheless, on this case, the preview solely shows an empty Todo record as a result of the container doesn’t have any knowledge populated. In the event you need to have some pattern knowledge, you may create a customized mannequin container particularly for the preview. Right here is an instance:
@MainActor
let previewContainer: ModelContainer = {
do {
let container = strive ModelContainer(for: ToDoItem.self,
configurations: .init(isStoredInMemoryOnly: true))
for _ in 1...10 {
container.mainContext.insert(generateRandomTodoItem())
}
return container
} catch {
fatalError("Didn't create container")
}
}()
func generateRandomTodoItem() -> ToDoItem {
let duties = [ "Buy groceries", "Finish homework", "Go for a run", "Practice Yoga", "Read a book", "Write a blog post", "Clean the house", "Walk the dog", "Attend a meeting" ]
let randomIndex = Int.random(in: 0..
We instantiate a ModelContainer
with an in-memory configuration and populate the container with 10 random to-do objects. To make use of this preview container, you merely modify the preview code and specify to make use of the previewContainer
:
#Preview {
ContentView()
.modelContainer(previewContainer)
}
When you made the modification, the preview pane ought to present you the Todo record view with 10 random objects.
Abstract
SwiftUI Preview is a helpful function that permits builders to visualise their app’s person interface immediately, with out the necessity to launch the simulator. This tutorial gives complete steering on successfully utilizing SwiftData with SwiftUI Preview. It is best to discover ways to create a customized container populated with pattern knowledge particularly for preview functions.
In the event you get pleasure from studying this tutorial and need to be taught extra about SwiftUI, don’t overlook to take a look at our Mastering SwiftUI guide for iOS 17 and Xcode 15.