Swift - MyClass与NSManagedObject不同

时间:2015-02-09 08:58:04

标签: swift generics core-data subclass nsmanagedobject

有人可以向我解释为什么以下游乐场代码会给我错误

  

EventEntityNSManagedObject

不同
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类要求的泛型。

谢谢!

1 个答案:

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