我的问题是关于使用需要泛型的方法扩展类型。
我想扩展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
,为什么它要求我投放?
答案 0 :(得分:0)
这比我想的要快。事实证明,将签名更改为包含<T: NSManagedObject>
可以解决该问题:
func isValid<T: NSManagedObject>(in fetchedResultsController: NSFetchedResultsController<T>) -> Bool