NSManagedObject 子类中的泛型类型
Posted
技术标签:
【中文标题】NSManagedObject 子类中的泛型类型【英文标题】:Generic Types in NSManagedObject subclass 【发布时间】:2017-09-01 21:05:05 【问题描述】:我正在学习 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】:因为 Swift 和 Foundation,这就是原因。
这种关系目前可能是通用的。它不是更通用的,因为
NSOrderedSet
不是通用的,因此您不能拥有 NSOrderedSet<ClassB>
,例如。
虽然 Swift 包括像 Array
和 Set
这样的泛型集合,但没有 Swift-y 泛型 OrderedSet
集合。
Core Data 代码生成中也存在与 Swift 相关的空白。例如,如果此关系未排序,则生成的代码仍将使用非泛型 NSSet
。没有充分的理由,但至少可以将其转换为 Set
。
【讨论】:
以上是关于NSManagedObject 子类中的泛型类型的主要内容,如果未能解决你的问题,请参考以下文章