Swift泛型:无法将类型“ NSFetchRequest <t>”的值转换为预期的参数类型“ NSFetchRequest <_>”

时间:2019-02-06 22:41:04

标签: swift generics promise

我正在做一些重构,以将代码移至使用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中实现的目标吗?

0 个答案:

没有答案