DEV Community

GoyesDev
GoyesDev

Posted on

[CoreData] Opciones de CodeGen

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
}
Enter fullscreen mode Exit fullscreen mode

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") 🎉"
    }
}
Enter fullscreen mode Exit fullscreen mode

Mientras que Xcode generaría:

// Generado automáticamente
extension Person {
    @NSManaged public var name: String?
    @NSManaged public var age: Int16
}
Enter fullscreen mode Exit fullscreen mode

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") 🎉"
    }
}
Enter fullscreen mode Exit fullscreen mode

¿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)