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, ModelContextMakro @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
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
- Stos Core Data: konfiguracja NSPersistentContainer
- SwiftData @Model i ModelContext
- Relacje i deskryptory pobierania
- Lekkie migracje i synchronizacja z CloudKit