У меня есть подпись метода: func fetch<T>(_ model: T.Type, predicate: NSPredicate?, sorted: Sorted?, completion: (([T]) -> Void)) where T: Storable
, и я хотел бы использовать model
в NSFetchRequest.
В этой ситуации используется extension NSManagedObject: Storable {}
, а протокол Storable
имеет некоторыеосновные определения метода CRUD внутри.
Я пробовал:
приведение T
к NSManagedObject
, однако это вызвало ошибки приоритета операторов.(T as! NSManagedObject)
не сработало, поэтому.
только с использованием NSFetchRequest<T>()
, но компилятор сообщает мне, что T does not conform to NSFetchRequestResult
.
where T: Storable, NSManagedObject
, но это означало бы необходимость обновления моего протокола, чтобы иметь подробности реализации, и я не хочу туда идти.
(model as! NSManagedObject).fetchRequest()
, но Cast from 'T.Type' to unrelated type 'NSManagedObject' always fails
То, что я пытаюсь достичь, в основном: я хочу иметь возможность fetch(User.self, ...)
с текущей сигнатурой метода, если это возможно.