我正在学习CoreData,我有一个非常基本的问题。
当我创建一个NSManagedObject子类时,在某些地方生成的代码会不遗余力地为我创建类型良好的函数,但在其他情况下,会留下令人讨厌的泛型,我不明白为什么。
例如,我有一对具有父/子、一对多(有序)关系的托管类。ClassA是可以容纳多个ClassB实例的父级。
在为ClassA生成的托管代码中,它将ClassB项的容器指定为:
@NSManaged public var items: NSOrderedSet?
这是通用的,但在后面的代码中有许多方便键入的函数,如下面的函数:
@objc(insertObject:inItemsAtIndex:)
@NSManaged public func insertIntoItems(_ value: ClassB, at idx: Int)
很好..。但是缺少一个基本的元素:获取items集合的强类型访问器。
当然,我可以很容易地进行转换:
var myItem = myObjectOfClassA.items[0] as! ClassB
但我很困惑..。为什么他们在很多情况下都不遗余力地让函数具有良好的类型,但却留下了一个最基本的泛型?
我假设这里有一些基本的我不理解的东西。
发布于 2017-09-04 21:46:37
因为Swift和基金会,这就是原因。
它是通用的,因为它是目前这种关系的可能。它不是更通用的,因为
NSOrderedSet
不是泛型,因此您不能使用NSOrderedSet<ClassB>
,因为Swift包含Array
和Set
等泛型集合,所以没有Swift-y泛型OrderedSet
集合。在核心数据代码生成中也存在与Swift相关的差距。例如,如果此关系未排序,则生成的代码仍将使用非泛型NSSet
。没有很好的理由这样做,但至少可以将其转换为Set
。
https://stackoverflow.com/questions/46007938
复制相似问题