Declaraciones de properties en templates Apple CoreData

Al revisar el código repetitivo provisto por Apple para build la stack de datos centrales en forma rápida, encuentro que hay dos variables creadas para cada elemento en la stack, por ejemplo, managedObjectModel y _managedObjectModel. Mi entendimiento es que la variable interna de la tienda para una propiedad es creada y administrada internamente por swift, entonces, ¿por qué tenemos que crearla manualmente? ¿Por qué no podemos simplemente crear una propiedad y dejar que el process de creación se encargue rápidamente, si no existe una a la vez? Gracias por adelantado.

No se crean dos properties: una es una propiedad almacenada y otra es una propiedad computada . El patrón es:

class Foo { var _bar : Bar var bar : Bar { return _bar } } 

La var _bar se almacena, pero se calcula la var bar . El patrón Apple específico se usa para inicializar perezosamente la propiedad almacenada como tal:

 class Foo { var _bar : Bar? = nil var bar : Bar { if _bar == nil { /* compute some stuff */ _bar = Bar (/* ... */) } return _bar! } } 

Lo anterior se usa mucho como una @lazy property . Podrías hacerlo uno con:

 class Foo { @lazy var bar : Bar = computeBar () func computeBar () -> Bar { /* compute some stuff */ return Bar (/* ... */) } }