Use la date de Swift con CoreData

Tengo muchos campos de date en mi model de database. CoreData permite utilizar NSDate o TimeInterval para save dates según la opción "Usar tipo escalar".

introduzca la descripción de la imagen aquí

Sin embargo, estas dos opciones son malas para mí, ya que quiero usar las dates como objects de date . Como NSDate no es implícitamente convertible a Date , tengo que convertir / convertir valores en Date o para implementar una gran cantidad de configuradores / obturadores personalizados en mis classs NSManagedObject.

He intentado usar ValueTransformer pero no funciona con classs non @ objc como Date .

Entonces, ¿hay una forma sencilla de save y get valores de Date para / desde CoreData?

Sí, pero puede que no te guste. Si declara la propiedad utilizando un tipo de date "Fecha" de Core y deja que Xcode genere la subclass NSManagedObject para usted, la propiedad será una propiedad @NSManaged de tipo NSDate . Como has descubierto, tendrás que lidiar con Date vs. NSDate tú mismo.

Si no permite que Xcode genere la subclass para usted (en Xcode 8, establezca "Codegen" en "Manual / Ninguno"), puede declarar la propiedad "date" de Datos del Núcleo como algo similar

 @NSManaged public var timestamp: Date? 

Simplemente funcionará. Puede leer y escribir valores de Date , y Core Data hará lo correcto. Pero se convierte completamente responsable del código en la subclass NSManagedObject . Tendrás que crear toda la class. Si actualiza el model de datos principales, deberá actualizar la class también. Si esto vale la pena depende de ti, pero es la única solución que parece existir en este momento.

Actualización : en Xcode 9, el código generado utiliza Date , por lo que ya no debería ser necesario.