Hello, It looks that you have what you wanted because Event.Entity is an alias of Event.
Pierre > Le 5 janv. 2017 à 16:47, Dave Reed via swift-users <swift-users@swift.org> a > écrit : > > 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 _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users