Swift Academy · Pelajaran

Relasi dan Fetch Descriptor

Memodelkan relasi satu-ke-banyak dan melakukan kueri dengan FetchDescriptor.

Pelajaran 3 dari 413 langkah

Relasi dan Fetch Descriptor adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.

Relasi SwiftData

Deklarasikan relasi antara kelas @Model menggunakan properti Swift. SwiftData menyimpulkan tipe relasi secara otomatis.

@Model
class Author {
  var name: String
  @Relationship(deleteRule: .cascade) var books: [Book] = []
  init(name: String) { self.name = name }
}

Atribut @Relationship

Gunakan @Relationship untuk menentukan aturan penghapusan dan relasi invers secara eksplisit.

@Model
class Book {
  var title: String
  var author: Author?
  init(title: String) { self.title = title }
}

Aturan Penghapusan

Aturan penghapusan mengontrol apa yang terjadi pada objek terkait saat induknya dihapus: .nullify, .cascade, .deny.

// .cascade: deleting Author deletes all Books
// .nullify: deleting Author sets book.author to nil
// .deny: prevents deletion if related objects exist
@Relationship(deleteRule: .cascade) var books: [Book] = []

Relasi Satu-ke-Banyak

Relasi satu-ke-banyak dideklarasikan sebagai properti array pada sisi "satu".

@Model class Department {
  var name: String
  @Relationship(deleteRule: .cascade) var employees: [Employee] = []
  init(name: String) { self.name = name }
}
@Model class Employee {
  var name: String
  var department: Department?
  init(name: String) { self.name = name }
}

Relasi Banyak-ke-Banyak

Deklarasikan array pada kedua sisi untuk relasi banyak-ke-banyak.

@Model class Student {
  var name: String
  var courses: [Course] = []
  init(name: String) { self.name = name }
}
@Model class Course {
  var title: String
  var students: [Student] = []
  init(title: String) { self.title = title }
}

FetchDescriptor

FetchDescriptor menggantikan NSFetchRequest dalam SwiftData. Konfigurasikan dengan predikat, pengurutan, dan batas pengambilan.

var descriptor = FetchDescriptor<Book>(
  predicate: #Predicate { $0.title.contains("Swift") },
  sortBy: [SortDescriptor(\Book.title)]
)
descriptor.fetchLimit = 10
let books = try context.fetch(descriptor)

Mengurutkan dengan SortDescriptor

Teruskan array SortDescriptor ke FetchDescriptor untuk pengurutan multikolom.

let descriptor = FetchDescriptor<Item>(
  sortBy: [
    SortDescriptor(\Item.priority, order: .reverse),
    SortDescriptor(\Item.name)
  ]
)

Menghitung Tanpa Mengambil Data

Gunakan context.fetchCount untuk menghitung catatan yang cocok tanpa memuat semua objek ke dalam memori.

let descriptor = FetchDescriptor<Book>(
  predicate: #Predicate { $0.rating > 4 }
)
let count = try context.fetchCount(descriptor)
print("High-rated books: \(count)")

Mengambil Relasi Terlebih Dahulu

Tetapkan relationshipKeyPathsForPrefetching pada FetchDescriptor untuk memuat objek terkait terlebih dahulu.

var descriptor = FetchDescriptor<Author>()
descriptor.relationshipKeyPathsForPrefetching = [\Author.books]
let authors = try context.fetch(descriptor)

@Query dengan Opsi seperti FetchDescriptor

Makro @Query mendukung opsi pengurutan dan predikat yang sama seperti FetchDescriptor.

@Query(
  filter: #Predicate<Book> { $0.author?.name == "Apple" },
  sort: \Book.title
)
var books: [Book]

Operasi Massal

SwiftData mendukung penghapusan massal melalui context.delete(model:where:) untuk operasi massal yang efisien.

try context.delete(model: Book.self, where: #Predicate { $0.rating < 2 })

Pemeriksaan Cepat

Tipe SwiftData apa yang menggantikan NSFetchRequest untuk mengambil objek @Model dengan filter dan pengurutan?

Ringkasan Pelajaran

Deklarasikan relasi dengan @Relationship(deleteRule:) pada kelas @Model. Gunakan FetchDescriptor dengan #Predicate dan SortDescriptor untuk meminta data. Gunakan fetchCount untuk penghitungan dan penghapusan massal untuk menghapus banyak data sekaligus.

Gratis untuk memulai

Belajar Swift dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
122
Pelajaran
409

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Relasi dan Fetch Descriptor” gratis?

Ya — teks lengkap “Relasi dan Fetch Descriptor” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Relasi dan Fetch Descriptor”?

Memodelkan relasi satu-ke-banyak dan melakukan kueri dengan FetchDescriptor. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Swift Academy?

Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Relasi dan Fetch Descriptor” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Stack Core Data: Menyiapkan NSPersistentContainer
  2. SwiftData @Model dan ModelContext
  3. Relasi dan Fetch Descriptor
  4. Migrasi Ringan dan Sinkronisasi CloudKit
← Kembali ke Swift Academy