Swift:返回自我types的数组

我想写一个类函数,它将返回一个类types的数组。 据我所知,我可以使用“Self”作为objective-c“instanceType”。 我的目标是用fetchObjects方法为NSManagedObject创build一个扩展。 这个方法将返回一个NSManagedObject子类的数组。 这是我的伪代码不能编译的例子:

extension NSManagedObject { class func fetchObjects(entity: String, context: NSManagedObjectContext, predicate: NSPredicate?, 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 } } 

任何想法如何我可以定义一个自我types的数组?

谢谢你的帮助!

这是我用于类似函数的jist,注意它是NSManagedObjectContext而不是NSManagedObject的扩展。 类似的东西可能会在NSManagedObject上完成

 protocol NamedManagedObject { class func entityName() -> String; } extension NSManagedObjectContext { func fetchObjects<T:NSManagedObject where T:NamedManagedObject>(entity:T.Type, predicate:NSPredicate? = nil, sortDescriptors:NSSortDescriptor[]? = nil) -> T[]? { let request = NSFetchRequest(entityName: entity.entityName()) request.predicate = predicate 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" } } 

然后使用它是如此简单:

 let objects = managedObjectContext.fetchObjects(MyObjectClass) 

请注意,您也可以为所有NSManagedObjects实现NamedManagedObject:

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

如果您还确保您的所有类都明确给出Objective-C友好名称:

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