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