NSManagedObject子类中的泛型类型

时间:2017-09-01 21:05:06

标签: ios core-data nsmanagedobject

我正在学习CoreData,我有一个相当基本的问题。

当我创建一个NSManagedObject子类时,生成的代码在某些地方不再为我制作好的类型函数,但在其他情况下会让事情变得非常通用,而且我很困惑。

例如,我有一对托管类,父/子,一对多(有序)关系。 ClassA是可以容纳许多ClassB实例的父类。

在为ClassA生成的托管代码中,它为ClassB项提供了容器:

@NSManaged public var items: NSOrderedSet?

这是通用的,但后来在代码中有许多方便的类型函数,例如:

@objc(insertObject:inItemsAtIndex:)
@NSManaged public func insertIntoItems(_ value: ClassB, at idx: Int)

很棒...但缺少一个基本的:一个强类型的访问器来获取项目集合。

我当然可以很容易地把事情当作:

var myItem = myObjectOfClassA.items[0] as! ClassB

但是我很困惑......为什么他们在许多情况下都会不遗余力地制作出很好的打字功能,但是留下最基本的东西之一呢?

我假设有一些基本的东西我不明白。

1 个答案:

答案 0 :(得分:0)

因为斯威夫特和基金会,这就是原因。

它与目前可能存在的这种关系一样通用。它不是更通用的,因为

  • NSOrderedSet不是通用的,因此您不能拥有NSOrderedSet<ClassB>
  • 虽然Swift包含ArraySet等通用集合,但没有Swift-y通用OrderedSet集合。

核心数据代码生成中也存在与Swift相关的差距。例如,如果未对此关系进行排序,则生成的代码仍将使用非泛型NSSet。这没有充分的理由,但至少可以将其转换为Set