SwiftData @Model og ModelContext
Definer modeller med @Model-makroen, og utfør CRUD via ModelContext.
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, ModelContextMakroen @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.
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
- Core Data-stakken: oppsett av NSPersistentContainer
- SwiftData @Model og ModelContext
- Relasjoner og Fetch Descriptors
- Lette migreringer og CloudKit-synkronisering