swift3 nsfetchedresultscontroller

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í:

https://www.andrewcbancroft.com/2015/03/05/displaying-data-with-nsfetchedresultscontroller-and-swift/

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.