Relaciones y descriptores de búsqueda
Modele relaciones uno a muchos y realice consultas con FetchDescriptor.
Relaciones y descriptores de búsqueda es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.
Relaciones en SwiftData
Declare relaciones entre clases @Model mediante propiedades de Swift. SwiftData infiere el tipo de relación.
@Model
class Author {
var name: String
@Relationship(deleteRule: .cascade) var books: [Book] = []
init(name: String) { self.name = name }
}Atributo @Relationship
Use @Relationship para especificar explícitamente las reglas de eliminación y las relaciones inversas.
@Model
class Book {
var title: String
var author: Author?
init(title: String) { self.title = title }
}Reglas de eliminación
Las reglas de eliminación controlan qué ocurre con los objetos relacionados cuando se elimina el objeto principal: .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] = []Relación uno a varios
Una relación uno a varios se declara como una propiedad de tipo array en el lado «uno».
@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 }
}Relaciones varios a varios
Declare arrays en ambos lados para establecer una relación varios a varios.
@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 reemplaza a NSFetchRequest en SwiftData. Configúrelo con un predicado, una ordenación y un límite de resultados.
var descriptor = FetchDescriptor<Book>(
predicate: #Predicate { $0.title.contains("Swift") },
sortBy: [SortDescriptor(\Book.title)]
)
descriptor.fetchLimit = 10
let books = try context.fetch(descriptor)Ordenación con SortDescriptor
Pase un array de SortDescriptor a FetchDescriptor para ordenar por varias columnas.
let descriptor = FetchDescriptor<Item>(
sortBy: [
SortDescriptor(\Item.priority, order: .reverse),
SortDescriptor(\Item.name)
]
)Recuento sin realizar búsquedas
Use context.fetchCount para contar los registros coincidentes sin cargar todos los objetos en memoria.
let descriptor = FetchDescriptor<Book>(
predicate: #Predicate { $0.rating > 4 }
)
let count = try context.fetchCount(descriptor)
print("High-rated books: \(count)")Precarga de relaciones
Establezca relationshipKeyPathsForPrefetching en un FetchDescriptor para cargar anticipadamente los objetos relacionados.
var descriptor = FetchDescriptor<Author>()
descriptor.relationshipKeyPathsForPrefetching = [\Author.books]
let authors = try context.fetch(descriptor)@Query con opciones similares a FetchDescriptor
La macro @Query admite las mismas opciones de ordenación y predicado que FetchDescriptor.
@Query(
filter: #Predicate<Book> { $0.author?.name == "Apple" },
sort: \Book.title
)
var books: [Book]Operaciones por lotes
SwiftData admite eliminaciones por lotes mediante context.delete(model:where:) para realizar operaciones masivas de forma eficiente.
try context.delete(model: Book.self, where: #Predicate { $0.rating < 2 })Comprobación rápida
Repaso de la lección
Declare relaciones con @Relationship(deleteRule:) en las clases @Model. Use FetchDescriptor con #Predicate y SortDescriptor para consultar datos. Use fetchCount para realizar recuentos y la eliminación por lotes para eliminar grandes cantidades de datos.
Aprende Swift con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 122
- Lecciones
- 409
Preguntas frecuentes
¿La lección «Relaciones y descriptores de búsqueda» es gratis?
Sí — el texto completo de «Relaciones y descriptores de búsqueda» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Relaciones y descriptores de búsqueda»?
Modele relaciones uno a muchos y realice consultas con FetchDescriptor. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Swift Academy?
No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Relaciones y descriptores de búsqueda»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Swift Academy?
Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Stack de Core Data: configuración de NSPersistentContainer
- @Model y ModelContext de SwiftData
- Relaciones y descriptores de búsqueda
- Migraciones ligeras y sincronización con CloudKit