Swift - MyClass 与 NSManagedObject 不同
Swift - MyClass is not identical to NSManagedObject
有人可以向我解释为什么以下游乐场代码会给我错误
EventEntity
is not identical to 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
的子 class 而 T
是指定 NSManagedObject
class 要求的泛型。
谢谢!
看看你的 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()
}
}
有人可以向我解释为什么以下游乐场代码会给我错误
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 开发的应用程序有问题。我创建了这个游乐场来重现这个问题。
这个错误的原因是什么? EventEntity
实际上是 NSManagedObject
的子 class 而 T
是指定 NSManagedObject
class 要求的泛型。
谢谢!
看看你的 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()
}
}