Is there a way to make a static or class method specify the return type be the actual class it is called with?
The example code below using protocols/extensions mostly works (the type is [Event.Entity] not [Event] but it seems to work. If I try to make DDRCoreData a base class and Event subclass it, I'm only able to get the return type to be [DDRCoreData], not [Event] when I call it with Event.items(in: moc) Here is the code that mostly works using protocols. Is there a better way to do this? protocol DDRCoreData { associatedtype Entity: NSManagedObject static func items(in context: NSManagedObjectContext, matching predicate: NSPredicate?, sortedBy sorters: [NSSortDescriptor]?) -> [Entity] } extension DDRCoreData { static func items(in context: NSManagedObjectContext, matching predicate: NSPredicate? = nil, sortedBy sorters: [NSSortDescriptor]? = nil) -> [Entity] { var items: [Entity] = [] context.performAndWait { let fetchRequest: NSFetchRequest<Entity> = Entity.fetchRequest() as! NSFetchRequest<Entity> fetchRequest.predicate = predicate fetchRequest.sortDescriptors = sorters do { items = try fetchRequest.execute() as [Entity] } catch { } } return items } } @objc(Event) public class Event: NSManagedObject { } extension Event: DDRCoreData { typealias Entity = Event } // compiler says items is of type [Event.Entity] let items = Event.items(in: controller.managedObjectContext!) Thanks, Dave Reed _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users