- Published on
SwiftData ga kirish
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Butun ob'ektlar to'plamini saqlash kerak bo'lsa β vazifalar ilovasi, jurnal yozuvlari, saqlangan retseptlar β fayl saqlash noqulayroq bo'lib qoladi. Har bir o'zgarishda butun massivni o'qib yozib yurish kerak, filtrlash esa hamma narsani xotiraga yuklashni talab qiladi.
Bu erda SwiftData kerak bo'ladi. SwiftData β Apple ning zamonaviy tuzilgan ma'lumot saqlash freymvorki. Siz Swift klasslari yordamida ma'lumot modelingizni tasvirlab, @Model makrosini qo'shasiz β SwiftData qolganini bajaradi: ma'lumot bazasini yaratadi, yozuvlarni yozadi, o'qiydi va viewlaringizni yangilangan saqlab turadi.
@Model β model yaratish
import SwiftData
import SwiftUI
// @Model bu sinfni SwiftData modeli sifatida belgilaydi
// Barcha persistenslik kodini avtomatik yaratadi
@Model
class VazifaElement {
// Har bir xususiyat ma'lumot bazasidagi ustun bo'ladi
var sarlavha: String
var bajarildi: Bool
// Date.now yaratilish vaqtini avtomatik o'rnatadi
var yaratilganVaqt: Date
// Yangi VazifaElement namunasini sozlash
init(sarlavha: String) {
self.sarlavha = sarlavha
self.bajarildi = false
self.yaratilganVaqt = .now
}
}
.modelContainer β ilovaga bog'lash
@main
struct VazifaIlovasi: App {
var body: some Scene {
WindowGroup {
ContentView()
}
// VazifaElement ni konteyner bilan ro'yxatdan o'tkazadi
// Ilova ildizida bir marta qo'shiladi
.modelContainer(for: VazifaElement.self)
}
}
ModelContext β yozish uchun
struct BaziKorinish: View {
// @Environment .modelContainer tomonidan ta'minlangan ModelContext ni injeksiya qiladi
@Environment(\.modelContext) private var modelContext
var body: some View {
Button("Vazifa qo'shish") {
// Yangi VazifaElement yaratib ma'lumot bazasiga qo'shamiz
let vazifa = VazifaElement(sarlavha: "Oziq-ovqat sotib olish")
modelContext.insert(vazifa)
}
}
}
| Qator | Vazifasi |
|---|---|
@Model | Swift makrosi β SwiftData ga kerak bo'lgan barcha persistenslik kodini yaratadi. Bu belgisiz SwiftData sinfingiz haqida bilmaydi. |
class VazifaElement | SwiftData modellari class bo'lishi shart, struct emas. SwiftData ob'ektlardagi vaqt davomidagi o'zgarishlarni kuzatadi β bu classlar qo'llab-quvvatlaydi, struct lar emas. |
.modelContainer(for: VazifaElement.self) | Ilovaga ma'lumot bazasi konteynerini bog'laydi. Konteyner haqiqiy ma'lumot bazasi faylini boshqaradi. Bu quyidagi barcha viewlar undan foydalana olishi uchun ildizda qilinadi. |
@Environment(\.modelContext) private var modelContext | Faol yozish kontekstini ko'rinishga injeksiya qiladi. Siz yozuvlarni modelContext orqali qo'shasiz va o'chirasiz. |
modelContext.insert(vazifa) | Yangi model ob'ektini ma'lumot bazasiga qo'shadi. |
SwiftData asosiy tushunchalari
// Bir necha modelni ro'yxatdan o'tkazish
.modelContainer(for: [VazifaElement.self, JurnalYozuvi.self])
// Xotiradagi konteyner β Preview va test uchun
// inMemory: true ma'lumot diskka yozilmasligini ta'minlaydi
.modelContainer(for: VazifaElement.self, inMemory: true)
// modelContext.delete() β yozuvni o'chirish
func ochirishIshlovi(offsets: IndexSet) {
for index in offsets {
modelContext.delete(vazifalar[index])
}
}
Tezkor ma'lumotnoma
| Sintaksis | Vazifasi |
|---|---|
@Model class MeningSinfim { } | Sinfni SwiftData doimiy modeli sifatida belgilaydi |
.modelContainer(for: MeningSinfim.self) | Ilovaga ma'lumot bazasi konteynerini bog'laydi β ildizda bir marta |
.modelContainer(for: MeningSinfim.self, inMemory: true) | Preview va testlar uchun xotira konteyneri |
@Environment(\.modelContext) var modelContext | Ko'rinishga faol yozish kontekstini injeksiya qiladi |
modelContext.insert(ob'ekt) | Yangi model ob'ektini ma'lumot bazasiga qo'shadi |
modelContext.delete(ob'ekt) | Model ob'ektini ma'lumot bazasidan o'chiradi |
π― Topshiriq: birinchi SwiftData modeli
Yangi Xcode loyihasi yarating va uchta xususiyatli @Model sinfini β Eslatma: sarlavha: String, mazmun: String, yaratilganVaqt: Date β aniqlang. Ilova kirish nuqtasiga .modelContainer(for: Eslatma.self) qo'shing. So'ngra sinov eslatmasini modelContext.insert orqali qo'shadigan tugma qo'shing. Ilova kompilyatsiya bo'lib, crash siz ishlatishini tasdiqlang β hali ro'yxat ko'rinishi yo'q, bu 9.5 darsda.