NSManagedObject上的Swift扩展以返回instancetype

Sno*_*man 6 swift

假设我有一个托管对象Word,我想能够打电话

var w = Word.create(context)
Run Code Online (Sandbox Code Playgroud)

所以我定义了以下扩展名:

extension NSManagedObject {
    class func create(context:NSManagedObjectContext) -> NSManagedObject {
        var classname = NSStringFromClass(self)
        var object = NSEntityDescription.insertNewObjectForEntityForName(classname, inManagedObjectContext: context) as NSManagedObject
        return object
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,它不能按预期工作.

  1. NSStringFromClass 返回jibberish,就像'_TtC8WordApp4Word',我无法弄清楚Swift等价物
  2. 返回类型是NSManagedObject什么时候它应该是类似的Self,但放入Self那里就不会编译.

有没有办法做我想做的事情?

Kla*_*aas 0

关于(1):Evan Swick 对损坏的名称有一些看法:http://www.eswick.com/2014/06/inside-swift/

请参阅[此答案][1]以获得更好的解释。

“_TtC8WordApp4Word”:您必须提取该字符串的最后一部分并将其用作参数entityName