0Pricing
Swift Academy · Lekcja

SwiftData @Model i ModelContext

Definiowanie modeli za pomocą makra @Model i wykonywanie operacji CRUD przez ModelContext.

SwiftData @Model i ModelContext to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Wprowadzenie do SwiftData

SwiftData (iOS 17+) to nowoczesny, natywny dla Swift framework trwałości danych firmy Apple, oparty wewnętrznie na Core Data.

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

Makro @Model

Należy oznaczyć klasę adnotacją @Model, aby utworzyć model SwiftData, który można utrwalać. Właściwości automatycznie stają się przechowywanymi atrybutami.

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

Konfiguracja ModelContainer

Należy utworzyć ModelContainer z typami modeli i wstrzyknąć go do środowiska SwiftUI.

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

ModelContext w widokach

Należy użyć @Environment(\.modelContext), aby uzyskać dostęp do kontekstu modelu w widoku SwiftUI.

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

Wstawianie i usuwanie

Należy wywołać context.insert, aby dodać modele, oraz context.delete, aby je usunąć. Zmiany są domyślnie zapisywane automatycznie.

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

@Query do pobierania danych

@Query w widokach SwiftUI automatycznie pobiera dane i aktualizuje widok po zmianie danych źródłowych.

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

Filtrowanie za pomocą predykatów

Należy przekazać #Predicate do @Query, aby deklaratywnie filtrować wyniki.

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

Zapisywanie ręczne

Należy wywołać try context.save(), gdy potrzebna jest jawna kontrola nad momentem utrwalania zmian.

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

@Attribute do dostosowywania

Należy używać @Attribute dla właściwości, aby dostosować sposób utrwalania danych (np. unikalność lub magazyn zewnętrzny).

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

Właściwości @Transient

Należy oznaczać właściwości za pomocą @Transient, aby wykluczyć je z utrwalania.

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

Konfiguracja ModelContainer

Należy skonfigurować kontener za pomocą jawnego schematu i planu migracji dla wersjonowanych modeli.

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

Szybkie sprawdzenie

Który wrapper właściwości SwiftUI automatycznie pobiera modele SwiftData i aktualizuje widok po zmianie danych?

Podsumowanie lekcji

Należy oznaczać klasy adnotacją @Model, aby można było je utrwalać. ModelContainer należy skonfigurować na poziomie aplikacji. Odczyt i zapis należy wykonywać za pomocą @Environment(\.modelContext). Dane można pobierać reaktywnie za pomocą @Query i filtrować za pomocą #Predicate.

Często zadawane pytania

Czy lekcja „SwiftData @Model i ModelContext” jest bezpłatna?

Tak — pełny tekst „SwiftData @Model i ModelContext” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „SwiftData @Model i ModelContext”?

Definiowanie modeli za pomocą makra @Model i wykonywanie operacji CRUD przez ModelContext. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „SwiftData @Model i ModelContext”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Stos Core Data: konfiguracja NSPersistentContainer
  2. SwiftData @Model i ModelContext
  3. Relacje i deskryptory pobierania
  4. Lekkie migracje i synchronizacja z CloudKit
← Powrót do Swift Academy