为什么我无法使用闭包创建提取的结果控制器?



我正在尝试按照一些教程创建一个获取的结果控制器。但是,在 Swift 3 中,尝试以您在下面看到的模式创建一个闭包类型时,我收到错误"无法推断复杂的闭包类型"。

class FriendsController: UICollectionViewController {
lazy var fetchedResultsController: NSFetchedResultsController = {
    let context = (UIApplication.shared.delegate as! 
AppDelegate).persistentContainer.viewContext
    let fetchRequest: NSFetchRequest = Friend.fetchRequest()
    let fetchedResultsController = 
NSFetchedResultsController(fetchRequest: fetchRequest, 
managedObjectContext: context, sectionNameKeyPath: nil, cacheName: 
nil)
    return fetchedResultsController
}()

我在制作其他东西(例如视图、按钮等(时使用这种闭包模式,但它不起作用(即使我不使用懒惰的 var(。这个错误对我来说也不是很清楚(如上所述(。谢谢。

NSFetchedResultsController

Swift 3 中是通用的。您必须指定一个具体类型,因为编译器无法推断复杂的闭包类型

lazy var fetchedResultsController: NSFetchedResultsController<Friend> = { ...

因为您应该指定 FetchedResultsController 所包含的对象的泛型类型

lazy var fetchedResultsController: NSFetchedResultsController<Friend> = {
    let context = //your context
    let req = // your request
    let fetchedResultsController = NSFetchedResultsController(fetchRequest: req, managedObjectContext:context, sectionNameKeyPath: nil, cacheName: nil)
    fetchedResultsController.delegate = self
    do {
        try fetchedResultsController.performFetch()
    }
    catch {
        print("fetch error (error)")
    }
    return fetchedResultsController
}()

最新更新