【发布时间】:2017-01-13 17:05:18
【问题描述】:
我被难住了。
这个问题的标题编译错误。
我正在创建一个基本上与NSFetchedResultsController 和UITableViewDataSource 的代表结婚的对象。 type 参数用于指示在获取请求中应该使用哪个NSManagedObject 子类。
这是一个 Swift 缺乏活力的例子,我们最终会编写各种疯狂的代码,(或者,我是 Swift 新手,不喜欢被告知我不能做什么)
所以,在UITableViewController 子类上,我想要一个属性
var dataSource: AnyDataSource<NSManagedObject>?
当我尝试使用 NSManagedObject 的子类创建其中一个并将其分配给该属性时,编译器会抱怨。似乎没有什么可以在没有警告的情况下成功。
你会认为我应该能够使用NSManagedObject 或其任何子类,所以我有点困惑。
有什么想法吗?我正在使用可以在 Internet 上找到的典型“类型擦除”模式,例如通过 realm.io。
【问题讨论】:
-
但是如果
AnyDataSource<T>有一个方法接受T类型的输入呢?如果您可以将AnyDataSource<NSManagedObjectSubclass>传递给AnyDataSource<NSManagedObject>,则可以将NSManagedObject传递给NSManagedObjectSubclass,这是非法的。 -
T 受到约束。其中
T: NSManagedObject,T:NSFetchRequestResult
标签: ios swift generics core-data type-erasure