07 Jul 2023 . 2 min read @gurjitpt
There are lot of frameworks introduces on WWDC23 SwiftData is one of them. SwiftData designs to persist data using Swift code. You can query and filter data and it's easily integrate with SwiftUI. It's very easy to use with widgets and CloudKit. First and foremost, we will see how we can create models using SwiftData.
We can create models using Swift @Model macro. Using @Model macro we can define schema with code and add functionality to model types.
It's similar to declaring a class in Swift.
class Person {
var id: Int
var name: String
var hobbies: [Hobby]
}
Add @Model to Person class and schema is generated.
import SwiftData
@Model
class Person {
var id: Int
var name: String
var hobbies: [Hobby]
}
import SwiftData
@Model
class Person {
@Attribite(.unique) var id: Int
var name: String
@Relationship(.cascade) var hobbies: [Hobby]
}
We can use SwiftUI view and scene modifiers to setup container.
import SwiftData
@Model
class Person {
@Attribite(.unique) var id: Int
var name: String
@Relationship(.cascade) var hobbies: [Hobby]
}
With model defined and the modelContainer inject into the environment you can access database entites.
import SwiftData
import SwiftUI
@Query var person: [Person]
var body: some View {
List(person) { person in
NavigationLink(person.name, destination: PersonView(person))
}
}
Likewise Coredata you need to access the store's context to perform add or delete operations. Once you have context then you can perform adding operations using context.insert() and delete objects using context.delete()
import SwiftData
import SwiftUI
@Environment(.\modelContext) private var context
@Query var person: [Person]
var body: some View {
NavigationView {
List(person) { person in
NavigationLink(person.name, destination: PersonView(person))
}
.onDelete(perform: deletePerson)
}
}
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
EditButton()
}
ToolbarItem {
Button(action: addPerson) {
Label("Add Person", systemImage: "plus")
}
}
}
}
private func addPerson() {
withAnimation {
let newPerson = Person("New Person")
context.insert(newPerson)
}
}
private func deletePerson(offsets: IndexSet) {
withAnimation {
for index in offsets {
context.delete(person[index])
}
}
}
}
SwiftData makes it very easy to persist data using simple code. You can use CoreData and SwiftData in same app. To find out more WWDC23 has set of videos on SwiftData:
Don’t hesitate to contact me if you have any questions or queries. Follow me on twitter @gurjitpt for any updates.
Thanks!
WRITTEN BY
Gurjit Singh
I’m Computer Science graduate and an iOS Engineer who writes about Swift and iOS development. Follow me on twitter @gurjitpt for more updates.
Enumerations (enum) enables you to write code in a type safe way. Enum is very useful while defining common type of values. You don't have to provide...
Mar 7, 2023 . 2 min read Swift Enum
Optional unwrapping is one of the most used patterns in iOS development. Swift 5.7 introduces new features included a new way to unwrap optional values...
Jun 14, 2022 . 2 min read Optional unwrapping
It's a common pattern or technique in various programming languages when we want to perform some action when a value is changed. Property ...
May 24, 2021 . 2 min read Property Observers