Обобщения Swift: Невозможно преобразовать значение типа «NSFetchRequest <T>» в ожидаемый тип аргумента «NSFetchRequest <_>» - PullRequest
0 голосов
/ 07 февраля 2019

Я делаю некоторый рефакторинг, чтобы переместить код в использование 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...