tutorial existing español efecto data apple ios swift xcode core-data

ios - existing - nsmanagedobject swift 4



¿Cómo representar los escalares opcionales de Core Data(Bool/Int/Double/Float) en Swift? (2)

Veo lo mismo, y considero que es un error. No está documentado en ningún lado que pueda encontrar. Aparentemente, Core Data está aplicando suposiciones de estilo Objective-C aquí, donde un valor booleano es NO y un valor por defecto es 0. La interfaz de Core Data / Swift tiene algunas asperezas, y esta es una que no había considerado antes.

Es un buen hallazgo, pero creo que estás atrapado hasta que Apple lo aborde. Usted ya conoce las mejores soluciones, que estoy de acuerdo no son geniales. Recomiendo archivar un error.

(Notado por primera vez en: Xcode 8.2.1, iOS 10, Swift 3) (todavía presente a partir de: Xcode 9 beta 3, iOS11, Swift 4)

Todos sabemos que el concepto de Core Data de optionals precede y no está estrictamente ligado al concepto Swift de optionals .

Y hemos aceptado que incluso si un atributo de Core Data está marcado como Non-optional , la subclase NSManagedObject generada NSManagedObject tiene un tipo optional :

(algunas personas eliminan manualmente el ? sin efectos adversos, otras no, pero eso no viene al caso)

(De aquí en adelante, el ejemplo y las capturas de pantalla son para propiedades de Bool , pero también para Int16/32/64 , Double , Float )

Ahora noté lo contrario: cuando un atributo de Core Data de tipo Bool está marcado como Optional (y se elige Use Scalar Type , que Xcode hace de forma predeterminada), la clase generada automáticamente tiene una variable de tipo non-optional .

¿Esto tiene sentido? ¿Es un error? ¿El comportamiento está documentado en alguna parte?

Y lo más importante, ¿cómo represento realmente un Bool opcional?

Puedo pensar en algunas soluciones alternativas, pero no parecen ideales (por ejemplo, no usar escalares, sino volver a la representación NSNumber del Bool . O (lo que es peor) tener un Bool separado llamado algo así como isVerified_isSet )

Nota: Hice un par de pruebas más y si el Default Value se establece en None o en NO , la variable se guarda como false (incluso si nunca la asigné en mi código). Si el Default Value se establece en YES , la variable se guarda como true . Aún así, esto significa que (aparentemente) no hay forma de representar lógicamente esta variable como no establecida aún.