我正在学习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
但是我很困惑......为什么他们在许多情况下都会不遗余力地制作出很好的打字功能,但是留下最基本的东西之一呢?
我假设有一些基本的东西我不明白。
答案 0 :(得分:0)
因为斯威夫特和基金会,这就是原因。
它与目前可能存在的这种关系一样通用。它不是更通用的,因为
NSOrderedSet
不是通用的,因此您不能拥有NSOrderedSet<ClassB>
。Array
和Set
等通用集合,但没有Swift-y通用OrderedSet
集合。核心数据代码生成中也存在与Swift相关的差距。例如,如果未对此关系进行排序,则生成的代码仍将使用非泛型NSSet
。这没有充分的理由,但至少可以将其转换为Set
。