Я делаю некоторый рефакторинг, чтобы переместить код в использование Promises (используя Hydra) вместо асинхронных обратных вызовов.Первоначально у меня был этот метод, и он работал нормально:
static func fetch<D: AnyDTO, E: AnyEntity>(
_ context : NSManagedObjectContext,
fetch request : NSFetchRequest<E>,
successHandler : @escaping ([D]) -> (),
errorHandler : @escaping ErrorHandler)
Поэтому я изменил его, чтобы он работал с такими обещаниями:
import Hydra
static func fetch<D: AnyDTO, E: AnyEntity>(
_ context : NSManagedObjectContext,
fetch request : NSFetchRequest<E>) -> Promise<[D]>
{
return Promise<[D]>(in: .background) { resolve, reject, _ in
...
}
}
, когда клиентский код пытается вызвать функцию следующим образом:
let request: NSFetchRequest<Location> = Location.fetchRequest()
return CacheUtils.fetch(context, fetch: request)
Но компилятор выдает мне эту ошибку:
Невозможно преобразовать значение типа 'NSFetchRequest' в ожидаемый тип аргумента 'NSFetchRequest <_>'
и я не уверен почему.Я проверил похожие вопросы и заметил проблему использования конкретного типа в функции (см. this ).Я думаю, что Promise
может соответствовать этому требованию, но, с другой стороны, Promise
является общим, поэтому я не уверен, что это проблема.Можно ли сделать то, что я пытаюсь достичь в Swift?