1

我的问题是关于使用需要泛型的方法扩展类型。

我想扩展IndexPath并添加一个方法来检查它在给定的NSFetchedResultsController. 这是我的扩展:

 public extension IndexPath {
    func isValid(in fetchedResultsController: NSFetchedResultsController<NSManagedObject>) -> Bool {
    guard let sections = fetchedResultsController.sections,
        section < sections.count,
        item < sections[section].numberOfObjects else {
            return false
    }
    return true
 }

在我的UICollectionViewController课堂上,我声明myFetchedResultsController

private var myFetchedResultsController: NSFetchedResultsController<MyModel>!

MyModel是一个NSManagedObject

但是,当我尝试调用我的新方法时:

indexPath.isValid(in: myFetchedResultsController)

我收到一个错误:

无法转换类型“NSFetchedResultsController!”的值 到预期的参数类型'NSFetchedResultsController'。插入 ' 作为!NSFetchedResultsController

我错过了什么?MyModelNSManagedObject为什么要我投呢?

4

1 回答 1

0

这比我想象的要快。事实证明,更改签名以包含<T: NSManagedObject>修复它:

func isValid<T: NSManagedObject>(in fetchedResultsController: NSFetchedResultsController<T>) -> Bool

于 2018-07-20T13:21:58.333 回答