2014-07-18 31 views
6

dire che ho un oggetto gestito Word, e voglio essere in grado di chiamareestensione Swift sulla NSManagedObject per tornare instanceType

var w = Word.create(context) 

Così ho definito la seguente estensione:

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

Tuttavia , non funziona come previsto.

  1. NSStringFromClass rendimenti jibberish, come '_TtC8WordApp4Word', e non riesco a capire un Swift equivalente
  2. Il tipo di ritorno è NSManagedObject, quando dovrebbe essere qualcosa di simile Self, ma mettendo in Self non ci sarebbe la compilazione .

C'è un modo per fare ciò che sto cercando di fare?

risposta

0

Per quanto riguarda (1): Evan Swick ha qualcosa circa i nomi alterati: http://www.eswick.com/2014/06/inside-swift/

Sede [questa risposta] [1] per una buona spiegazione.

"_TtC8WordApp4Word": Dovresti estrarre l'ultima parte di quella stringa e utilizzarla per il parametro entityName.

+0

Dov'è la risposta con la buona spiegazione ? – Emil

+0

@Emil sembra essere cancellato :-( – Klaas

0

Il modo migliore che ho trovato finora è questo, io ancora preferisco non devono passare il tipo da una funzione, ma non hanno avuto successo con questo approccio

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

Ecco una possibile soluzione che non richiede il tipo da passare alla funzione: http://stackoverflow.com/a/27112385/1187415. –

+1

@MartinR Interessante quando ho provato quell'ultima volta non avrebbe funzionato, continuando a lamentarsi del fatto che T non è lo stesso tipo di Self – aryaxt

Problemi correlati