哪些Swift类型可以在Objective-C中表示?

时间:2014-06-30 10:59:51

标签: objective-c swift nsmanagedobject optional

我正在Swift中创建一个NSManagedObject子类,当我创建一个类型为Int,Float或Double的可选属性时,我得到一个错误(也许是其他我没试过的)。

@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

Objective-C中可以表示哪些可选类型?当我使用Swift数组或字符串时(以及当我没有使用可选的Int或Double时),为什么不出现错误?

1 个答案:

答案 0 :(得分:18)

您无法将任意类型分配给Core Data属性,因为访问器方法是在运行时动态创建的。如果您创建 Objective-C Xcode中的托管对象子类,然后您将看到使用的正确数据类型 通过Core Data,例如

  • NSNumber表示布尔,整数,浮点数和双精度属性,
  • NSString表示字符串属性,
  • NSSet用于(无序)多对多关系。

您必须在Swift中选择相同的数据类型。

理论上,原始数据类型的标量访问器也应该起作用, 但是在当前的Swift版本中似乎存在一个问题,比较一下 How to use Core Data Integer 64 with Swift Int64?EXC_BAD_ACCESS error when trying to change Bool property