the standard programming library language framework objective-c swift nsmanagedobject optional

objective c - standard - ¿Qué tipos de Swift se pueden representar en Objective-C?



the swift programming language pdf (1)

Estoy creando una subclase NSManagedObject en Swift y recibo un error cuando creo una propiedad opcional de tipo Int, Float o Double (y quizás otras que no probé).

@NSManaged var number: Float? //error:Property cannot be marked @NSManaged because its type cannot be represented in Objective-C @NSManaged var anotherNumber: Float //no error @NSManaged var array: NSArray? //no error @NSManaged var anotherArray: Array<String>? //no error

¿Qué tipos opcionales se pueden representar en Objective-C? ¿Por qué no aparece el error cuando estoy usando una matriz o cadena Swift (y cuando no estoy usando un Int o Double opcional)?


No puede asignar tipos arbitrarios a las propiedades de Datos centrales porque los métodos de acceso se crean dinámicamente en tiempo de ejecución. Si crea una subclase de objeto gestionado Objective-C en Xcode, verá los tipos de datos adecuados utilizados por Core Data, por ejemplo

  • NSNumber para NSNumber booleanos, enteros, flotantes y dobles,
  • NSString para atributos de cadena,
  • NSSet para (desordenado) a muchas relaciones.

Tienes que elegir el mismo tipo de datos en Swift.

Teóricamente, los accesores escalares para tipos de datos primitivos también deberían funcionar, pero parece que hay un problema en la versión actual de Swift. Compare ¿Cómo usar Core Data Integer 64 con Swift Int64? o el error EXC_BAD_ACCESS al intentar cambiar la propiedad Bool .