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
…