无法将类型“ NSFetchRequest <NSFetchRequestResult>”的值转换为指定的类型“ NSFetchRequest <T>”

Kam*_*icz 5 core-data ios swift ios10

我想使用iOS10中引入的新Core Data API。

@available(iOS 10.0, *)
open class func fetchRequest() -> NSFetchRequest<NSFetchRequestResult>
Run Code Online (Sandbox Code Playgroud)

我创建了通用函数来获取各种对象:

func getAllEntities<T: NSManagedObject>(ofType type: T.Type, success: @escaping ([T]) -> ()) throws -> [T] {
    let fetchRequest: NSFetchRequest<T> = T.fetchRequest()
    let asyncFetchRequest = NSAsynchronousFetchResult(fetchRequest: fetchRequest) { result in
        success(result.finalResult ?? [])
    }

    try databaseStack.persistentContainer.viewContext.execute(asyncFetchRequest)
}
Run Code Online (Sandbox Code Playgroud)

但是let fetchRequest: NSFetchRequest<T> = T.fetchRequest()我遇到了问题:

无法将类型的值转换'NSFetchRequest<NSFetchRequestResult>'为指定的类型'NSFetchRequest<T>'

我做错什么了?

Mar*_*n R 8

T.fetchRequest()返回 a NSFetchRequest<NSFetchRequestResult>,您必须将其显式转换为特定的NSFetchRequest<T>

let fetchRequest = T.fetchRequest() as! NSFetchRequest<T>
let asyncFetchRequest = NSAsynchronousFetchRequest(fetchRequest: fetchRequest) { result in
    success(result.finalResult ?? [])
}
Run Code Online (Sandbox Code Playgroud)