有人可以向我解释为什么下面的 Playground 代码会给我错误
EventEntity
is not identical toNSManagedObject
import UIKit
import CoreData
class Table<T: NSManagedObject> {
func toFetchedResultsController() -> FetchedResultsController<T> {
return FetchedResultsController<T>()
}
}
class EventEntity: NSManagedObject {
}
class FetchedResultsController<T: NSManagedObject> {
}
class Factory<T: NSManagedObject>: NSObject {
var fetchedResultsController: FetchedResultsController<T>
init(fetchedResultsController: FetchedResultsController<T>) {
self.fetchedResultsController = fetchedResultsController
super.init()
}
}
class TableViewDataSource: NSObject {
init(factory: Factory<NSManagedObject>) {
super.init()
}
}
var dataSource: TableViewDataSource
let fetchedResultsController = Table<EventEntity>().toFetchedResultsController()
let factory = Factory(fetchedResultsController: fetchedResultsController)
dataSource = TableViewDataSource(factory: factory)
我在使用 Swift 开发的应用程序时遇到问题。我创建了这个 Playground 来重现该问题。
这个错误的原因是什么? EventEntity
实际上是 NSManagedObject
的子类,而 T
是指定 NSManagedObject
类要求的泛型。
谢谢!
最佳答案
看看你的TableViewDataSource
初始化器:
init(factory: Factory<NSManagedObject>) {
super.init()
}
在这里,您指定初始化程序需要 Factory<NSManagedObject>
,然后你将它传递给 Factory<EventEntity>
。这些类型不相同。
我认为你的意思是指定 TableViewDataSource
也适用于泛型类型(只要它是 some NSManagedObject
),如下所示:
class TableViewDataSource<T: NSManagedObject>: NSObject {
init(factory: Factory<T>) {
super.init()
}
}
关于Swift - MyClass 与 NSManagedObject 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28405950/