有人可以向我解释为什么以下游乐场代码会给我错误
不同
EventEntity
与NSManagedObject
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开发的应用程序时遇到了问题。我创建了这个游乐场来重现这个问题。
出现此错误的原因是什么? EventEntity
实际上是NSManagedObject
的子类,T
是指定NSManagedObject
类要求的泛型。
谢谢!
答案 0 :(得分:3)
查看您的TableViewDataSource
初始值设定项:
init(factory: Factory<NSManagedObject>) {
super.init()
}
在此,您指定初始值设定项需要Factory<NSManagedObject>
,然后您将其传递给Factory<EventEntity>
。这些类型不是相同的。
我认为您打算做的是指定TableViewDataSource
也适用于通用类型(只要它某些 NSManagedObject
),就像这样:
class TableViewDataSource<T: NSManagedObject>: NSObject {
init(factory: Factory<T>) {
super.init()
}
}