Вам необходимо объявить протокол с помощью @objc
:
@objc protocol Listable where Self: NSManagedObject {
var displayOrder: Int { get set }
}
. Это скажет компилятору использовать среду выполнения Objective- C при обработке пути к ключу и разрешит преобразование из Swift. KeyPath
в строку, необходимую для SortDescriptor
.
Одно примечание, sortedFetchRequest
пришлось удалить из определения протокола, поскольку реализации по умолчанию для требований протокола в протоколе невозможны: @ onj c, поскольку реализация по умолчанию отправляется статически, а протокол @ obj c отправляется динамически. Это не мешает вам использовать реализацию по умолчанию в коде Swift.