当前位置: 首页 > 面试题库 >

如何在NSManagedObject Swift扩展中创建托管对象子类的实例?

韩涵衍
2023-03-14
问题内容

当创建扩展助手来NSManagedObject创建新的托管对象子类时,swift提供了Self一种可以模仿的类型,instancetype这很好,但是我似乎无法从中进行类型转换AnyObject。以下代码无法编译,错误为
“ AnyObject”无法转换为“ Self”

救命?

extension NSManagedObject
{
    class func createInContext(context:NSManagedObjectContext) -> Self {
        var classname = className()
        var object: AnyObject = NSEntityDescription.insertNewObjectForEntityForName(classname, inManagedObjectContext: context)
        return object
    }


    class func className() -> String {
        let classString = NSStringFromClass(self)
        //Remove Swift module name
        let range = classString.rangeOfString(".", options: NSStringCompareOptions.CaseInsensitiveSearch, range: Range<String.Index>(start:classString.startIndex, end: classString.endIndex), locale: nil)
        return classString.substringFromIndex(range!.endIndex)
    }

}

问题答案:

(现在为Swift 3/4更新。可以在编辑历史记录中找到早期Swift版本的解决方案。)

您可以使用unsafeDowncast到的返回值转换NSEntityDescription.insertNewObject()Self
(这是该方法实际上是所谓的类型):

extension NSManagedObject {
    class func create(in context: NSManagedObjectContext) -> Self {
        let classname = entityName()
        let object = NSEntityDescription.insertNewObject(forEntityName: classname, into: context)
        return unsafeDowncast(object, to: self)
    }

    // Returns the unqualified class name, i.e. the last component.
    // Can be overridden in a subclass.
    class func entityName() -> String {
        return String(describing: self)
    }
}

然后

let obj = YourEntity.createInContext(context)

工作,并且编译器将obj正确的类型推断为YourEntity



 类似资料:
  • 问题内容: 我对项目有一些特定要求,因此决定实施不受管理的Neo4j扩展。 我在Neo4j文档中找到了以下信息: 非托管扩展 测试您的扩展 这看起来是一个好的开始。但是我无法为我工作。 是否有一些更完整的工作示例/模板可以用作参考? 问题答案: “手工”解决方案 TL; DR; - https://github.com/FylmTM/neo4j-unmanaged-extension- templ

  • 我通过学校为一项任务提供的简报创建了一个飞机座位预订系统。我遇到了一个我无法解决的主要问题。 摘要说明抽象类必须有一个抽象方法和大约4个公共方法。在抽象类的两个子类中,我们都必须初始化对象数组(所有普通的座位)。然而,一旦它们被初始化,我不知道如何将它们发送回抽象类(该类有一个检查未预订的飞机座位的方法,这就是我需要初始化的座位对象的地方) ArrayIndexOutOfBounds在一个应该在边

  • 本文向大家介绍如何在Python中创建类对象?,包括了如何在Python中创建类对象?的使用技巧和注意事项,需要的朋友参考一下 使用该类的构造函数创建一个类对象。然后将该对象称为类的实例。类实例化使用函数表示法。  在下面的代码中,我们定义一个类并创建了相同类的实例,如下所示

  • 问题内容: 我想扩展现有的XMLHttpRequest对象,以便它可以与所有浏览器一起使用。现在我已经对JS继承和其他方面有所了解,但是在开始之前,我希望看到它的一个很好的例子。 HTML5具有上载和进度事件的东西,我想在继承的新对象中实现,即使不通过向客户端引入JS错误不支持该功能,该对象也可以运行。所以我想实现这样的目标。 可以将其他方法附加到UploadXMLHttpRequest类,如下所

  • 我写了这个,但我不明白这是什么。

  • 当我们实例化子类对象时,父类的构造函数也会被调用。那么它是父类的对象的创建吗?