如何解决在Swift 5中转换为通用类型
我想编写一个通用函数,该函数使用Core Data框架在本地获取某种数据。我这样写函数:
func fetch<T:NSManagedObject>(type: T.Type = T.self,completion: @escaping (([T]?) -> ())) {
do {
let data = try context.fetch(T.fetchRequest()) as [T]
completion(data)
} catch {
completion(nil)
}
}
但是,编译器告诉我此错误“强制转换无法将类型'[Any]'的值转换为类型'[T]',应使用通用参数'Element'的参数('Any'和'T')平等”
是否可以进行这种类型的演员?
解决方法
尝试以下代码:
func fetch<T:NSManagedObject>(type: T.Type = T.self,completion: @escaping (([T]?) -> ())) {
do {
let data = try context.fetch(T.fetchRequest()) as? [T]
completion(data)
} catch {
completion(nil)
}
}
(如Sweeper指出的,fetch
返回一个数组,因此您必须将结果强制转换为[T]
而不仅仅是T
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。