Swift Academy · leksjon

SwiftData @Model og ModelContext

Definer modeller med @Model-makroen, og utfør CRUD via ModelContext.

Leksjon 2 av 413 trinn

SwiftData @Model og ModelContext er en gratis leksjon i Swift Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Swift Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Swift Academy inneholder totalt 4 leksjoner.

Introduksjon til SwiftData

SwiftData (iOS 17+) er Apples moderne, Swift-baserte rammeverk for persistens, bygget på Core Data i bakgrunnen.

import SwiftData
// Main concepts: @Model, ModelContainer, ModelContext

Makroen @Model

Annoter en klasse med @Model for å gjøre den til en modell som kan lagres med SwiftData. Egenskapene blir automatisk lagrede attributter.

@Model
class Item {
  var name: String
  var createdAt: Date
  init(name: String) {
    self.name = name
    self.createdAt = Date()
  }
}

Sette opp ModelContainer

Opprett en ModelContainer med modelltypene dine, og injiser den i SwiftUI-miljøet.

@main
struct MyApp: App {
  var body: some Scene {
    WindowGroup {
      ContentView()
    }
    .modelContainer(for: Item.self)
  }
}

ModelContext i visninger

Bruk @Environment(\.modelContext) for å få tilgang til modellkonteksten i en SwiftUI-visning.

struct AddItemView: View {
  @Environment(\.modelContext) private var context
  func addItem() {
    context.insert(Item(name: "New Item"))
  }
}

Sette inn og slette

Kall context.insert for å legge til modeller og context.delete for å fjerne dem. Endringer lagres automatisk som standard.

let item = Item(name: "Coffee")
context.insert(item)   // add
context.delete(item)   // remove
// Auto-saved on next run loop

@Query for henting

@Query i SwiftUI-visninger henter automatisk data og oppdaterer visningen når de underliggende dataene endres.

struct ItemList: View {
  @Query(sort: \Item.createdAt, order: .reverse) var items: [Item]
  var body: some View {
    List(items) { item in Text(item.name) }
  }
}

Filtrere med predikater

Send et #Predicate til @Query for å filtrere resultater deklarativt.

@Query(filter: #Predicate<Item> { $0.name.contains("Swift") })
var swiftItems: [Item]

Manuell lagring

Kall try context.save() når du trenger eksplisitt kontroll over når endringer lagres permanent.

do {
  try context.save()
} catch {
  print("Save error: \(error)")
}

@Attribute for tilpasning

Bruk @Attribute på egenskaper for å tilpasse hvordan de lagres (for eksempel som unike verdier eller i ekstern lagring).

@Model
class User {
  @Attribute(.unique) var email: String
  @Attribute(.externalStorage) var avatar: Data?
  init(email: String) { self.email = email }
}

@Transient-egenskaper

Merk egenskaper med @Transient for å utelate dem fra persistensen.

@Model
class Session {
  var token: String
  @Transient var isExpired: Bool = false
  init(token: String) { self.token = token }
}

Konfigurere ModelContainer

Konfigurer containeren med et eksplisitt skjema og en migreringsplan for versjonerte modeller.

let schema = Schema([Item.self, User.self])
let config = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false)
let container = try ModelContainer(for: schema, configurations: config)

Kunnskapssjekk

Hvilken SwiftUI-property wrapper henter automatisk SwiftData-modeller og oppdaterer visningen når dataene endres?

Oppsummering av leksjonen

Annoter klasser med @Model for å gjøre dem lagringsbare. Sett opp ModelContainer på appnivå. Les og skriv via @Environment(\.modelContext). Hent reaktivt med @Query. Filtrer med #Predicate.

Gratis å komme i gang

Lær deg Swift med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
122
Leksjoner
409

Ofte stilte spørsmål

Er leksjonen «SwiftData @Model og ModelContext» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Swift Academy, inkludert «SwiftData @Model og ModelContext», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Swift Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «SwiftData @Model og ModelContext»?

Definer modeller med @Model-makroen, og utfør CRUD via ModelContext. Du øver på Swift Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Swift Academy?

Ingen tidligere erfaring er nødvendig. Swift Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «SwiftData @Model og ModelContext»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Swift Academy-leksjonen?

Ja. Alle Swift Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Core Data-stakken: oppsett av NSPersistentContainer
  2. SwiftData @Model og ModelContext
  3. Relasjoner og Fetch Descriptors
  4. Lette migreringer og CloudKit-synkronisering
← Tilbake til Swift Academy