无法推断复杂闭包 return 类型;添加显式类型以消除歧义
Unable to infer complex closure return type; add explicit type to disambiguate
有人知道如何解决我遇到的这个错误吗?在以下代码块的第一行收到错误:
let fetchedResultsController: NSFetchedResultsController = {
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Message")
let delegate = UIApplication.shared.delegate as! AppDelegate
let context = delegate.persistentContainer.viewContext
let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
return frc
}()
尝试在闭包中添加 return 类型,如下代码:
let fetchedResultsController: NSFetchedResultsController = { () -> NSFetchedResultsController<NSFetchRequestResult> in
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Message")
let delegate = UIApplication.shared.delegate as! AppDelegate
let context = delegate.persistentContainer.viewContext
let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
return frc
}()
错误信息有点误导,问题是你做了
未指定变量的通用占位符类型。
您可以向闭包添加显式 return 类型,如@Mukesh
建议,在这种情况下,变量上的类型注释不是
需要:
let fetchedResultsController = { () -> NSFetchedResultsController<NSFetchRequestResult> in
// ...
return frc
}()
或者完全指定变量的类型,然后闭包return
自动推断类型:
let fetchedResultsController: NSFetchedResultsController<NSFetchRequestResult> = {
// ...
return frc
}()
两个问题:
- 如其他答案中所述,您必须指定泛型类型,在您的情况下,理想类型是具体的
NSManagedObject
子类。
NSFetchedResultsController
的声明至少需要一个排序描述符。
let fetchedResultsController: NSFetchedResultsController<Message> = {
let fetchRequest = NSFetchRequest<Message>(entityName: "Message")
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "somekey", ascending: true]
let delegate = UIApplication.shared.delegate as! AppDelegate
let context = delegate.persistentContainer.viewContext
let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
return frc
}()
有人知道如何解决我遇到的这个错误吗?在以下代码块的第一行收到错误:
let fetchedResultsController: NSFetchedResultsController = {
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Message")
let delegate = UIApplication.shared.delegate as! AppDelegate
let context = delegate.persistentContainer.viewContext
let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
return frc
}()
尝试在闭包中添加 return 类型,如下代码:
let fetchedResultsController: NSFetchedResultsController = { () -> NSFetchedResultsController<NSFetchRequestResult> in
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Message")
let delegate = UIApplication.shared.delegate as! AppDelegate
let context = delegate.persistentContainer.viewContext
let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
return frc
}()
错误信息有点误导,问题是你做了 未指定变量的通用占位符类型。
您可以向闭包添加显式 return 类型,如@Mukesh 建议,在这种情况下,变量上的类型注释不是 需要:
let fetchedResultsController = { () -> NSFetchedResultsController<NSFetchRequestResult> in
// ...
return frc
}()
或者完全指定变量的类型,然后闭包return 自动推断类型:
let fetchedResultsController: NSFetchedResultsController<NSFetchRequestResult> = {
// ...
return frc
}()
两个问题:
- 如其他答案中所述,您必须指定泛型类型,在您的情况下,理想类型是具体的
NSManagedObject
子类。 NSFetchedResultsController
的声明至少需要一个排序描述符。let fetchedResultsController: NSFetchedResultsController<Message> = { let fetchRequest = NSFetchRequest<Message>(entityName: "Message") fetchRequest.sortDescriptors = [NSSortDescriptor(key: "somekey", ascending: true] let delegate = UIApplication.shared.delegate as! AppDelegate let context = delegate.persistentContainer.viewContext let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil) return frc }()