使用需要泛型的方法扩展 Swift 类型

Extending Swift type with method that requires a generic

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

我想扩展 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 class 中,我声明 myFetchedResultsController:

private var myFetchedResultsController: NSFetchedResultsController<MyModel>!

MyModel 是一个 NSManagedObject.

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

indexPath.isValid(in: myFetchedResultsController)

我得到一个错误:

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

我错过了什么? MyModelNSManagedObject 那为什么要我施法呢?

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

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