У меня есть несколько перечислений, связанных с Core Data, например:
enum ManagedItemProperties: String {
case purchaseDate
case productId
case addons
}
Я хочу иметь протокол для каждого из этих перечислений, чтобы генерировать NSSortDescriptor
и NSPredicate
s для выборки объектов по их свойствам,
Можно ли написать протокол вроде:
protocol ManagedProperty {
func sortDescriptor(ascending: Bool) -> NSSortDescriptor
func predicateEqual(to arg: CVarArg) -> NSPredicate
func predicate(_ booleanValue: Bool) -> NSPredicate
}
И его реализация по умолчанию похожа на эту:
extension ManagedProperty where ????? {
func sortDescriptor(ascending: Bool = true) -> NSSortDescriptor {
return NSSortDescriptor(key: ?????, ascending: ascending)
}
func predicateEqual(to arg: CVarArg) -> NSPredicate {
return NSPredicate(format: "SELF.%@ == %@", ?????, arg)
}
func predicate(_ booleanValue: Bool) -> NSPredicate {
return NSPredicate(format: "SELF.%@ == %d", ?????, booleanValue)
}
}