0Pricing
Swift Academy · Ders

İlişkiler ve Fetch Descriptor'ları

Bire çok ilişkileri modelleyin ve FetchDescriptor ile sorgulayın.

İlişkiler ve Fetch Descriptor'ları, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.

SwiftData İlişkileri

@Model sınıfları arasındaki ilişkileri Swift özelliklerini kullanarak tanımlayın. SwiftData ilişki türünü çıkarır.

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

@Relationship Özniteliği

Silme kurallarını ve ters ilişkileri açıkça belirtmek için @Relationship kullanın.

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

Silme Kuralları

Silme kuralları, ana nesne silindiğinde ilişkili nesnelere ne olacağını denetler: .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] = []

Bire-Çok İlişkisi

Bire-çok ilişkisi, “bir” tarafında dizi özelliği olarak tanımlanır.

@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 }
}

Çoğa-Çok İlişkileri

Çoğa-çok ilişkisi için her iki tarafta da diziler tanımlayın.

@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, SwiftData'da NSFetchRequest'in yerini alır. Bunu predicate, sıralama ve getirme sınırıyla yapılandırın.

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

SortDescriptor ile Sıralama

Birden çok sütuna göre sıralama yapmak için SortDescriptor dizisini FetchDescriptor'a aktarın.

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

Getirme Yapmadan Sayma

Tüm nesneleri belleğe yüklemeden eşleşen kayıtları saymak için context.fetchCount kullanın.

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

İlişkileri Önceden Getirme

İlişkili nesneleri önceden yüklemek için bir FetchDescriptor üzerinde relationshipKeyPathsForPrefetching değerini ayarlayın.

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

FetchDescriptor Benzeri Seçeneklerle @Query

@Query makrosu, FetchDescriptor ile aynı sıralama ve predicate seçeneklerini destekler.

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

Toplu İşlemler

SwiftData, verimli toplu işlemler için context.delete(model:where:) üzerinden toplu silmeyi destekler.

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

Hızlı Kontrol

Filtreler ve sıralamayla @Model nesnelerini getirmek için NSFetchRequest'in yerini hangi SwiftData türü alır?

Ders Özeti

@Model sınıflarında @Relationship(deleteRule:) ile ilişkileri tanımlayın. Verileri sorgulamak için FetchDescriptor ile #Predicate ve SortDescriptor kullanın. Sayma için fetchCount, toplu kaldırma için toplu silme işlemini kullanın.

Sıkça Sorulan Sorular

“İlişkiler ve Fetch Descriptor'ları” dersi ücretsiz mi?

Evet — “İlişkiler ve Fetch Descriptor'ları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.

“İlişkiler ve Fetch Descriptor'ları” dersinde ne öğreneceğim?

Bire çok ilişkileri modelleyin ve FetchDescriptor ile sorgulayın. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Swift Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“İlişkiler ve Fetch Descriptor'ları” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Core Data Yığını: NSPersistentContainer Kurulumu
  2. SwiftData @Model ve ModelContext
  3. İlişkiler ve Fetch Descriptor'ları
  4. Hafif Geçişler ve CloudKit Eşitlemesi
← Swift Academy Sayfasına Dön