Ich versuche, eine generische Funktion in einer Klassenerweiterung zu erstellen, aber ich erhalte einen Compilerfehler.Schnelle generische Funktion
Ich habe zu den Klassen A und B, die sich beide NSManagedObject
ich eine findOne()
Funktion in meiner Klasse Erweiterung erstellen möchten.
extension NSManagedObject {
public class func findOne() -> NSManagedObject {
// some working stuff returning a NSManagedObject
}
}
Mein Problem ist: Wenn ich diese Methode auf A zu verwenden, ist der Rückgabetyp NSManagedObject
let aObject = A.findOne //type is NSManagedObject
Also, natürlich kann ich es gegossen und ein A-Klasse-Objekt
let aObject = A.findOne as! A//type is NSManagedObject
erhalten
Starten hier, ich möchte meine Erweiterung Implementierung ersetzen, um generische verwenden, so dass ich:
Ich versuchte dies:
extension NSManagedObject {
public class func findOne<T>() -> T {
// some working stuff returning a NSManagedObject
}
}
Aber A.findOne()
ist noch NSManagedObject
Typ.
Kann mir jemand helfen?
UPDATE der folgende Code tatsächlich funktioniert, wenn ich benutze:
class func findOne<T : NSManagedObject>() -> T {
//Do some stuff
return myObject as! T
}
let myObject : A = A.findOne()
möchten Sie vielleicht verwenden 'Self' als Rückgabetyp zu werfen. – luk2302
Vergleichen [Wie kann ich Instanzen von verwalteten Objektunterklassen in einer NSManagedObject Swift-Erweiterung erstellen?] (Http://stackoverflow.com/questions/27109268/how-can-i-create-instances-of-managed-object-subclasses- in-a-nsmanagedObject-swi). –
@Alessandro: Warum haben Sie "OS X" in den Titel und die Tags hinzugefügt? Core Data existiert auch auf iOS, und nichts in dieser Frage ist spezifisch für OS X. –