Swift: return Array de tipo self

Me gustaría escribir una function de class, que devolverá una matriz del tipo de class. Hasta donde entendí, puedo usar "Self" para el objective-c "instanceType". Mi objective es crear una extensión para un NSManagedObject con un método fetchObjects. Este método devolverá una matriz de subclasss NSManagedObject. Aquí hay un ejemplo de mi pseudo código que no comstack:

extension NSManagedObject { class func fetchObjects(entity: String, context: NSManagedObjectContext, pnetworkingicate: NSPnetworkingicate?, sortDescriptors: NSSortDescriptor[]?) -> Self[] { // can't define return type of an array with type Self // also var declaration does not work var objects : Self[]? return objects } } 

¿Alguna idea de cómo puedo definir una matriz de tipo Self?

¡Gracias por cualquier ayuda!

Este es el resumen de lo que uso para una function similar, tenga en count que es una extensión en NSManagedObjectContext lugar de NSManagedObject . Algo similar probablemente podría hacerse en NSManagedObject

 protocol NamedManagedObject { class func entityName() -> String; } extension NSManagedObjectContext { func fetchObjects<T:NSManagedObject where T:NamedManagedObject>(entity:T.Type, pnetworkingicate:NSPnetworkingicate? = nil, sortDescriptors:NSSortDescriptor[]? = nil) -> T[]? { let request = NSFetchRequest(entityName: entity.entityName()) request.pnetworkingicate = pnetworkingicate request.sortDescriptors = sortDescriptors var error:NSError? = nil let results = self.executeFetchRequest(request, error: &error) as? T[] assert(error == nil) return results } } extension MyObjectClass : NamedManagedObject { class func entityName() -> String { return "MyObjectClass" } } 

Entonces usarlo es tan simple como:

 let objects = managedObjectContext.fetchObjects(MyObjectClass) 

Tenga en count que también puede implementar NamedManagedObject para todos los NSManagedObjects con:

 extension NSManagedObject : NamedManagedObject { class func entityName() -> String { return NSStringFromClass(self) } } 

Si también se asegura de que todas sus classs reciben explícitamente los nombres descriptivos de Objective-C:

 @objc(MyManagedObject) class MyManagedObject : NSManagedObject { ... }