SwiftData (iOS 17+)
1. Model
import SwiftData
@Model
class Todo {
var title: String
var isComplete: Bool
var createdAt: Date
init(title: String) {
self.title = title
self.isComplete = false
self.createdAt = Date()
}
}2. Container Setup
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(for: [Todo.self])
}
}3. Query Data
struct TodoList: View {
@Query var todos: [Todo]
var body: some View {
List(todos) { todo in
Text(todo.title)
}
}
}
// With sort
@Query(sort: \Todo.createdAt, order: .reverse)
var todos: [Todo]
// With filter
@Query(filter: #Predicate<Todo> { !$0.isComplete })
var incompleteTodos: [Todo]4. Insert/Delete
struct TodoList: View {
@Environment(\.modelContext) var context
@Query var todos: [Todo]
func addTodo() {
let todo = Todo(title: "New Task")
context.insert(todo)
}
func deleteTodo(_ todo: Todo) {
context.delete(todo)
}
}5. Relationships
@Model
class Category {
var name: String
@Relationship(deleteRule: .cascade)
var todos: [Todo] = []
}
@Model
class Todo {
var title: String
var category: Category?
}📝 So với Core Data
| SwiftData | Core Data |
|---|---|
| Swift-native | Objective-C origin |
| Macro-based | Model editor |
| Simpler API | More features |
| iOS 17+ | iOS 3+ |
Last updated on