Cuando creamos entidades en Core Data, Xcode puede generar automáticamente las clases que las representan en Swift u Objective-C.
En el Inspector de atributos de cada entidad hay una sección llamada Codegen con tres opciones:
1. Class Definition
Con esta opción, Xcode genera la clase completa de la entidad.
- Incluye tanto la definición de la clase como las propiedades
@NSManaged. - El código no aparece en el proyecto; Xcode lo guarda en los archivos internos de DerivedData.
- No deberíamos modificarlo manualmente (se regenera al compilar).
// Generado automáticamente (no visible en el proyecto)
@objc(Person)
public class Person: NSManagedObject {
@NSManaged public var name: String?
@NSManaged public var age: Int16
}
2. Category/Extension
Aquí, Xcode genera solo las propiedades dentro de una extensión. Yo soy responsable de crear la clase principal.
Tendríamos que escribir esto:
@objc(Person)
public class Person: NSManagedObject {
func birthdayMessage() -> String {
return "Feliz cumpleaños, \(name ?? "desconocido") 🎉"
}
}
Mientras que Xcode generaría:
// Generado automáticamente
extension Person {
@NSManaged public var name: String?
@NSManaged public var age: Int16
}
3. Manual/None
Con esta opción, Xcode no genera nada. Tendríamos que escribir la clase completa, incluyendo propiedades y métodos:
// Escrita por mi:
@objc(Person)
public class Person: NSManagedObject {
@NSManaged public var name: String?
@NSManaged public var age: Int16
func birthdayMessage() -> String {
return "Feliz cumpleaños, \(name ?? "desconocido") 🎉"
}
}
¿Cuál deberíamos usar?
- Rápido y sin complicaciones: Class Definition
- Organización y flexibilidad: Category/Extension
- Cuando necesito control absoluto o integraciones personalizadas: Manual/None
Top comments (0)