2014-07-18 6 views
6

Sagen, ich habe ein verwaltetes Objekt Word, und ich möchte in der Lage seinSwift Erweiterung auf NSManagedObject zurückzukehren instanceType

var w = Word.create(context) 

zu nennen Also habe ich die folgende Erweiterung definiert:

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

jedoch funktioniert es nicht wie gewünscht.

  1. NSStringFromClass kehrt jibberish, wie ‚_TtC8WordApp4Word‘, und ich kann ein Swift nicht herausfinden, äquivalent
  2. Der Rückgabetyp ist NSManagedObject, wenn es so etwas wie Self sein sollte, aber Self dort setzen kompilieren würde nicht .

Gibt es eine Möglichkeit zu tun, was ich versuche zu tun?

Antwort

0

In Bezug auf (1): Evan Swick etwas über die verstümmelten Namen hat: http://www.eswick.com/2014/06/inside-swift/

See [diese Antwort] [1] für eine gute Erklärung.

"_TtC8WordApp4Word": Sie müssten den letzten Teil dieser Zeichenfolge extrahieren und für den Parameter entityName verwenden.

+0

Wo ist die Antwort mit der guten Erklärung erfolgreich ? – Emil

+0

@Emil scheint gelöscht zu werden :-( – Klaas

0

Der beste Weg, die ich bisher gefunden habe, ist dies, habe ich noch lieber nicht den Typen an eine Funktion haben, aber noch nicht mit diesem Ansatz

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) 
+1

Hier ist eine mögliche Lösung, die nicht erfordert, dass der Typ an die Funktion übergeben wird: http://stackoverflow.com/a/27112385/1187415. –

+1

@MartinR Interessant, wenn ich es versuchte das letzte Mal würde es nicht funktionieren .. beschwerte sich darüber, dass T nicht derselbe Typ wie Self ist – aryaxt

Verwandte Themen