Section 3/182 menit

3. Teori: Cara Kerja SwiftData

3. Teori: Cara Kerja SwiftData

Lapisan Abstraksi di Atas Core Data

SwiftData bukan reinvention dari nol — ia adalah API layer baru di atas Core Data. Ketika Anda mendefinisikan @Model class Task, SwiftData menggunakan Swift macro system untuk:

  1. Generate NSEntityDescription secara otomatis dari properti class
  2. Mengubah stored properties menjadi computed properties yang memanggil Core Data accessor
  3. Membungkus NSManagedObject di balik interface Swift yang bersih

Artinya: semua data masih tersimpan di SQLite yang sama, schema migration masih melalui Core Data migration stack, dan interop antara SwiftData dan Core Data sangat mungkin dilakukan di project yang sama.

Model Graph dan Identity

Setiap instance @Model class memiliki identitas unik yang dikelola oleh ModelContext. Dua fetch dari context yang sama akan mengembalikan object yang sama (identity guarantee). Modifikasi di satu tempat langsung terlihat di tempat lain selama berada di context yang sama.

swift
ModelContainer (satu per app, biasanya)
    ├── ModelContext (main) ← @Query, SwiftUI views
    ├── ModelContext (background) ← @ModelActor
    └── ModelContext (background) ← import, export

ModelContainer adalah owner dari persistent store. ModelContext adalah unit of work — tempat Anda melakukan fetch, insert, delete, dan save. Setiap context punya in-memory scratchpad sendiri; perubahan hanya tersimpan permanen saat save() dipanggil.

Cara Kerja @Query

@Query adalah property wrapper yang mengobservasi hasil fetch secara reaktif. Di belakang layar ia menggunakan NSFetchedResultsController (mekanisme yang sama yang dipakai Core Data untuk mengupdate UI). Setiap kali data berubah di persistent store, @Query otomatis mengirim notifikasi ke SwiftUI view untuk re-render.

Cara Kerja #Predicate

#Predicate adalah macro yang mentransformasi Swift closure menjadi NSPredicate pada compile time. Compiler menganalisis expression di dalam closure, memverifikasi nama properti dan tipe data, lalu menghasilkan predicate yang benar. Tidak ada format string — tidak ada runtime ambiguity.