代码之家  ›  专栏  ›  技术社区  ›  Mark J

如何获取扩展以返回子类类型[重复]

  •  0
  • Mark J  · 技术社区  · 6 年前

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

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

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sweeper    6 年前

    你只需要把它变成通用的!

    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)