Swift - MyClass 与 NSManagedObject 不同

标签 swift generics core-data subclass nsmanagedobject

有人可以向我解释为什么下面的 Playground 代码会给我错误

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 开发的应用程序时遇到问题。我创建了这个 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/

相关文章:

ios - 用渐变描边画一个圆

ios - 从 'AUAudioUnitBus?' 转换为无关类型 'UICollectionViewLayoutAttribute' 总是失败 - swift 2 iOS 9

swift - 无法在 Xcode Playground 中为 Swift 导入 TensorFlow

scala - 编写在 Scala 中调用泛型函数的泛型函数

ios - NSError 版本 : message sent to deallocated instance

swift - 新的 iOS 开发者应该使用 Storyboard 和 Xibs/Nibs 吗?

java - 能否从构造函数参数的泛型类型推断出泛型类型?

java - 如何制作具有通用类型和 Android Fragment 继承的接口(interface)?

ios - CoreData 返回与 >0 个实体有关系的实体以及这些关系的数量

ios - Xcode 8.3 核心数据 "use of undeclared type"错误