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

标签 swift generics extension-methods

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

我想延长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>!

MyModelNSManagedObject .

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

indexPath.isValid(in: myFetchedResultsController)

我得到一个错误:

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

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

最佳答案

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

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

关于swift - 使用需要泛型的方法扩展 Swift 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51443447/

相关文章:

swift - 如何通过快照将时间戳(在 firebase Double 或 String 中的 neSTLed)检索为 int 以在 if 语句中使用?

ios - Alamofire HTML 请求在每个应用程序安装时仅有效一次

c# - 抽象类——我是想多了还是做对了?

objective-c - Swift 的 CGRect 和 CGSize 扩展在 Objective-C 中不可见

c# - 两个 C# 扩展泛型方法之间的调用不明确,其中 T :class and other where T:struct

arrays - Swift 4 排序多维数组

swift - 如何以正确的顺序执行乘法和/或除法?

Java 泛型,支持 "Specialization"?与 C++ 模板的概念相似性?

c# - 单例、遗传和继承——让所有子类都继承单例功能

c# - 如何获取通用扩展方法的 MethodInfo?