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
[email protected]
https://lists.swift.org/mailman/listinfo/swift-users