Published on

SwiftData ga kirish

Authors

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)
        }
    }
}
QatorVazifasi
@ModelSwift makrosi — SwiftData ga kerak bo'lgan barcha persistenslik kodini yaratadi. Bu belgisiz SwiftData sinfingiz haqida bilmaydi.
class VazifaElementSwiftData 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 modelContextFaol 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

SintaksisVazifasi
@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 modelContextKo'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.

Buy mea coffee