如何获得返回子类型的扩展

时间:2018-04-23 09:59:42

标签: swift core-data

我正在尝试扩展NSManagedObject以获取对象,但作为子上下文的一部分。我试图让函数返回子类类型 - 而不是ManagedObject。

extension NSManagedObject {

func inContext(_ context: NSManagedObjectContext) -> Self {
    let objectID = self.objectID
    let childObject = context.object(with: objectID)
    return childObject
}

知道如何让函数返回正确的类型吗?

1 个答案:

答案 0 :(得分:1)

你必须使这个通用!

extension NSManagedObject {

    func inContext<T: NSManagedObject>(_ context: NSManagedObjectContext) -> T? {
        let objectID = self.objectID
        let childObject = context.object(with: objectID)
        return childObject as? T
    }
}

不幸的是,你必须使用类型注释这样调用它,除非可以推断出类型。

let objectInContext: MyManagedobjectType? = myManagedObject.inContext(someContext, type: MyManagedObjectType.self)