Swift Academy · Oppitunti

SwiftData @Model ja ModelContext

Mallien määrittäminen @Model-makrolla ja CRUD-toimintojen suorittaminen ModelContextilla.

Oppitunti 2/413 vaihetta

SwiftData @Model ja ModelContext on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 4 oppituntia.

SwiftDatan esittely

SwiftData (iOS 17+) on Applen moderni, Swift-natiivinen pysyväistallennuskehys, joka perustuu taustalla Core Dataan.

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

@Model-makro

Merkitse luokka @Model-makrolla, jotta siitä tulee pysyvästi tallennettava SwiftData-malli. Ominaisuuksista tulee automaattisesti tallennettavia attribuutteja.

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

ModelContainerin määritys

Luo ModelContainer mallityypeilläsi ja injektoi se SwiftUI-ympäristöön.

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

ModelContext näkymissä

Käytä @Environment(\.modelContext)-ominaisuuswrapperia mallikontekstin käyttämiseen SwiftUI-näkymässä.

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

Lisääminen ja poistaminen

Kutsu context.insert-menetelmää mallien lisäämiseksi ja context.delete-menetelmää niiden poistamiseksi. Muutokset tallennetaan oletusarvoisesti automaattisesti.

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

@Query hakemiseen

SwiftUI-näkymien @Query-ominaisuuswrapper hakee tiedot automaattisesti ja päivittää näkymän taustalla olevien tietojen muuttuessa.

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

Suodattaminen predikaateilla

Välitä #Predicate @Query-ominaisuuswrapperille tulosten deklaratiivista suodattamista varten.

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

Manuaalinen tallennus

Kutsu try context.save(), kun tarvitset täsmällisen hallinnan siihen, milloin muutokset tallennetaan.

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

@Attribute mukauttamista varten

Käytä ominaisuuksissa @Attribute-makroa pysyväistallennuksen toiminnan mukauttamiseen, esimerkiksi yksilöllisyyden tai ulkoisen tallennuksen määrittämiseen.

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

@Transient-ominaisuudet

Merkitse ominaisuudet @Transient-makrolla, jotta ne jätetään pysyväistallennuksen ulkopuolelle.

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

ModelContainerin määritys

Määritä säilö käyttämällä eksplisiittistä skeemaa ja migraatiosuunnitelmaa versioitujen mallien hallintaa varten.

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

Pikatarkistus

Mikä SwiftUI-ominaisuuswrapper hakee SwiftData-mallit automaattisesti ja päivittää näkymän tietojen muuttuessa?

Oppitunnin kertaus

Merkitse luokat @Model-makrolla, jotta ne voidaan tallentaa pysyvästi. Määritä ModelContainer appitasolla. Lue ja kirjoita dataa @Environment(\.modelContext)-ominaisuuswrapperin kautta. Hae tietoja reaktiivisesti @Query-ominaisuuswrapperilla ja suodata niitä #Predicate-makrolla.

Aloita maksutta

Opi Swift tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
122
Oppitunnit
409

Usein kysytyt kysymykset

Onko oppitunti ”SwiftData @Model ja ModelContext” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “SwiftData @Model ja ModelContext”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”SwiftData @Model ja ModelContext”?

Mallien määrittäminen @Model-makrolla ja CRUD-toimintojen suorittaminen ModelContextilla. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”SwiftData @Model ja ModelContext”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?

Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Core Data -pino: NSPersistentContainerin määritys
  2. SwiftData @Model ja ModelContext
  3. Relaatiot ja Fetch Descriptorit
  4. Kevyet migraatiot ja CloudKit-synkronointi
← Takaisin: Swift Academy