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()
    }
}