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

时间:2018-07-20 13:18:41

标签: swift generics extension-methods

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

我想扩展LibB并添加一种方法来检查它在给定的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

我得到一个错误:

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

我想念什么? indexPath.isValid(in: myFetchedResultsController)MyModel,为什么它要求我投放?

1 个答案:

答案 0 :(得分:0)

这比我想的要快。事实证明,将签名更改为包含<T: NSManagedObject>可以解决该问题:

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