2017-09-01 142 views
0

我正在学习CoreData,我有一个相当基本的问题。NSManagedObject子类中的泛型类型

当我创建一个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 

但我很困惑...为什么他们走出去的方式,使输入很好功能很多情况下,但留下的一个最基本的东西通用?

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

回答

0

因为Swift和Foundation,这就是为什么。

,因为它是目前可能的这种关系这是作为一般。这不是一般的多,因为

  • NSOrderedSet是不通用的,所以你不能有NSOrderedSet<ClassB>,例如。
  • 虽然斯威夫特包括泛型集合像ArraySet,没有斯威夫特-Y通用OrderedSet集合。

也有在核心数据代码生成SWIFT相关间隙。例如,如果这种关系没有排序,则生成的代码仍然会使用非通用的NSSet。这没有什么好的理由,但至少它可以投射到Set