web-dev-qa-db-fra.com

Quels types Swift peuvent être représentés dans Objective-C?

Je crée une sous-classe NSManagedObject dans Swift et j'obtiens une erreur lorsque je crée une propriété facultative de type Int, Float ou Double (et peut-être d'autres que je n'ai pas essayées).

@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

Quels types facultatifs peuvent être représentés dans Objective-C? Pourquoi l'erreur n'apparaît-elle pas lorsque j'utilise un tableau Swift ou une chaîne (et lorsque je n'utilise pas un Int ou Double facultatif)?

25
Moon Cat

Vous ne pouvez pas affecter de types arbitraires aux propriétés Core Data car les méthodes d'accesseur sont créées dynamiquement au moment de l'exécution. Si vous créez une sous-classe d'objet géré Objective-C dans Xcode, vous verrez les types de données appropriés utilisés par Core Data, par ex.

  • NSNumber pour les attributs booléens, entiers, flottants et doubles,
  • NSString pour les attributs String,
  • NSSet pour les relations (non ordonnées) à plusieurs.

Vous devez choisir le même type de données dans Swift.

Théoriquement, les accesseurs scalaires pour les types de données primitifs devraient également fonctionner, mais il semble y avoir un problème dans la version actuelle de Swift, comparez Comment utiliser Core Data Integer 64 avec Swift Int64? ou erreur EXC_BAD_ACCESS lors de la tentative de modification de la propriété Bool .

26
Martin R