使用需要泛型的方法扩展 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
我错过了什么? MyModel
是 NSManagedObject
那为什么要我施法呢?
这比我想象的要快。事实证明,更改签名以包含 <T: NSManagedObject>
可以修复它:
func isValid<T: NSManagedObject>(in fetchedResultsController: NSFetchedResultsController<T>) -> Bool
我的问题是关于使用需要泛型的方法扩展类型。
我想扩展 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
我错过了什么? MyModel
是 NSManagedObject
那为什么要我施法呢?
这比我想象的要快。事实证明,更改签名以包含 <T: NSManagedObject>
可以修复它:
func isValid<T: NSManagedObject>(in fetchedResultsController: NSFetchedResultsController<T>) -> Bool