微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – 无法将类型'[T]’的值转换为预期的参数类型'[_]’

每次我尝试编译这个,我都会收到错误
Cannot convert value of type '[T]' to expected argument type '[_]'

我不确定为什么会一直这样,我试图查找解决方案,但没有找到任何看起来有用的东西.
这是我的代码

class FetchRequest <T: NSManagedobject>: NSFetchRequest<NSFetchRequestResult> {
        init(entity: NSEntityDescription) {
        super.init()
        self.entity = entity
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    typealias FetchResult = (success: Bool,objects: [T],error: NSError?)
    func fetch <T> (request: FetchRequest<T>,context: NSManagedobjectContext) -> FetchResult {
        do {
         let results = try context.fetch(request)
            return FetchResult(true,results as! [T],nil)
        } catch let error as NSError {
         return (false,[],error)
        }
    }
}

编辑:

在这一行得到错误

return FetchResult(true,nil)
问题是你有两个通用的占位符类型叫做T.一个在类范围,一个方法范围.当你说结果为! [T],你指的是方法范围的T – 它与你的FetchResult类型别名中使用的类范围T无关,它是你的fetch方法的返回类型.

因此,您只需要重命名一个占位符,或者更好的是,消除看似冗余的请求:方法中的参数,只需使用self:

func fetch(inContext context: NSManagedobjectContext) -> FetchResult {
    do {
        let results = try context.fetch(self)
        return (true,nil)
    } catch let error as NSError {
        return (false,error)
    }
}

现在,您只需在要获取的FetchRequest实例上调用fetch(inContext :)即可.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐