swift3 - vago var NSFetchedResultsController produce error en Swift 3.0
(1)
Acabo de migrar mi proyecto a Swift 3 y estoy atascado en un error para mi perezoso instancia NSFetchResultController. Yo uso este método aquí:
Mi código actual
lazy var fetchedResultsController: NSFetchedResultsController = {
let primarySortDescriptor = NSSortDescriptor(key: "company", ascending: true)
let sortDescriptors = [primarySortDescriptor]
self.fetchRequest.sortDescriptors = sortDescriptors
let frc = NSFetchedResultsController(
fetchRequest: self.fetchRequest,
managedObjectContext: self.managedObjectContext!,
sectionNameKeyPath: nil,
cacheName: nil)
frc.delegate = self
return frc
}()
Produce 2 errores como se muestra a continuación
¿Este método ya no es posible en Swift 3? Traté de agregar () -> <<error type>> in
como lo sugirió Xcode pero no pude obtener los resultados correctos.
El () -> <<error type>>
sugerido () -> <<error type>>
es engañoso.
En Swift 3 NSFetchedResultsController
ha convertido en un tipo genérico. Tienes que inicializarlo:
lazy var fetchedResultsController: NSFetchedResultsController<NSFetchRequestResult> = {
...
}()
así como NSFetchRequest
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "MyEntity")
Si está utilizando una subclase de NSManagedObject
, que se recomienda, puede usar el tipo de subclase para ser más específico
lazy var fetchedResultsController: NSFetchedResultsController<MyEntity> = {
....
let fetchRequest = NSFetchRequest<MyEntity>(entityName: "MyEntity")
El gran beneficio es que puedes deshacerte de todos los moldes de tipo usando fetch
, insert
, etc.