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

Moo*_*Cat 21 objective-c optional nsmanagedobject swift

我正在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
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*n R 21

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

  • NSNumber for Boolean,Integer,Float和Double属性,
  • NSString 对于String属性,
  • NSSet 对于(无序的)多对多的关系.

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

从理论上讲,原始数据类型的标量访问器也应该可以正常工作,但是当前的Swift版本似乎存在问题,比较 如何将Core Data Integer 64与Swift Int64一起使用?尝试更改Bool属性时出现EXC_BAD_ACCESS错误.

  • 如果您希望NSManaged属性是可选的,则需要使用NSNumber而不是boolean,integer,float和double.使用NSManaged时,标量类型似乎不是可选的. (3认同)