Persistence
SwiftData (iOS 17+) A Swift-native persistence framework built on Core Data: @Model, ModelContainer, @Query, #Predicate, CloudKit sync
Mature object graph persistence (NSManagedObject, NSFetchRequest) UserDefaults / @AppStorage
Files (FileManager, Codable JSON/plist) Documents, caches Secrets (tokens, passwords), via Security framework or wrappers (KeychainAccess) GRDB, SQLite.swift CloudKit, Firebase, Supabase
import SwiftData
@Model
final class Note {
var title: String
var body: String
var createdAt: Date
@Relationship(deleteRule: .cascade) var tags: [Tag] = []
init(title: String, body: String = "") {
self.title = title
self.body = body
createdAt = .now
}
}
@Model final class Tag { var name: String; init(name: String) { self.name = name } }
@main
struct NotesApp: App {
var body: some Scene {
WindowGroup { NotesView() }
.modelContainer(for: [Note.self, Tag.self])
}
}
struct NotesView: View {
@Environment(\.modelContext) private var context
@Query(sort: \Note.createdAt, order: .reverse) private var notes: [Note]
var body: some View {
NavigationStack {
List {
ForEach(notes) { Text($0.title) }
.onDelete { offsets in offsets.forEach { context.delete(notes[$0]) } }
}
.toolbar { Button("Add") { context.insert(Note(title: "New note")) } }
}
}
}
// Querying with predicates
let descriptor = FetchDescriptor<Note>(predicate: #Predicate { $0.title.contains("Swift") }, sortBy: [SortDescriptor(\.createdAt)])
let resul
…