作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题是关于使用需要泛型的方法扩展类型。
我想延长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
我错过了什么? MyModel
是NSManagedObject
那它为什么要我施法呢?
最佳答案
这比我想象的要快。事实证明,更改签名以包含 <T: NSManagedObject>
修复它:
func isValid<T: NSManagedObject>(in fetchedResultsController: NSFetchedResultsController<T>) -> Bool
关于swift - 使用需要泛型的方法扩展 Swift 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51443447/
我是一名优秀的程序员,十分优秀!