Skip to Content

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

SwiftDataCore Data
Swift-nativeObjective-C origin
Macro-basedModel editor
Simpler APIMore features
iOS 17+iOS 3+
Last updated on