假设我有一个托管对象Word
,我希望能够调用
var w = Word.create(context)
所以我定义了以下扩展名:
extension NSManagedObject {
class func create(context:NSManagedObjectContext) -> NSManagedObject {
var classname = NSStringFromClass(self)
var object = NSEntityDescription.insertNewObjectForEntityForName(classname, inManagedObjectContext: context) as NSManagedObject
return object
}
}
但是,它无法按预期工作。
NSStringFromClass
返回乱码,就像'_TtC8WordApp4Word'一样,我无法弄清楚Swift的等价物NSManagedObject
,它应该类似于Self
,但将Self
放在那里就不会编译。有没有办法做我想做的事情?
答案 0 :(得分:0)
关于(1):Evan Swick对错位名称有所了解:http://www.eswick.com/2014/06/inside-swift/
请参阅[本回答] [1]以获得更好的解释。
“_ TtC8WordApp4Word”:您必须提取该字符串的最后一部分并将其用于entityName
参数。
答案 1 :(得分:0)
到目前为止,我发现的最好方法是,我仍然不必将类型传递给函数,但是使用该方法并没有成功
extension NSManagedObject {
class func create <T: NSManagedObject>(type: T.Type, context:NSManagedObjectContext) -> T {
var classname = NSStringFromClass(type).pathExtension
return NSEntityDescription.insertNewObjectForEntityForName(classname, inManagedObjectContext: context) as T
}
}
NSManagedObject.create(Word.self, context:moc)