swift – 无法将类型'[T]’的值转换为预期的参数类型'[_
发布时间:2020-12-14 02:24:18 所属栏目:百科 来源:网络整理
导读:每次我尝试编译这个,我都会收到错误: Cannot convert value of type '[T]' to expected argument type '[_]' 我不确定为什么会一直这样,我试图查找解决方案,但没有找到任何看起来有用的东西. 这是我的代码: class FetchRequest T: NSManagedObject: NSFetc
|
每次我尝试编译这个,我都会收到错误:
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 :)即可. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
