ios - 快速转换为泛型类类型
问题描述
我的目标是将从数据库中获取的结果返回到任何给定的类型(模型)。出于某种原因,我收到错误为“使用未声明的类型'模型'”。我在这里想念什么?以及如何实现我的目标。
func fetchData<T>(entity:String, model: T)-> T? {
let request = NSFetchRequest<NSFetchRequestResult>(entityName:entity)
request.returnsObjectsAsFaults = false
do {
let result = try managedObjectContext.fetch(request)
if result.count > 0 {
return result as model // Point that gets the error
}
} catch {
print("Failed to retrive data")
}
return nil
}
解决方案
没必要投。
根据 Joakim 的回答,我建议使该方法更通用,throw
并将错误移交给调用者。
使用泛型创建获取请求摆脱了类型转换
func fetchData<T : NSFetchRequestResult>(entity:String, model: T.Type) throws -> [T] {
let request = NSFetchRequest<T>(entityName:entity)
request.returnsObjectsAsFaults = false
return try managedObjectContext.fetch(request)
}
并使用它
do {
let result = try fetchData(entity: “Foo”, model: Foo.self)
print(result)
} catch {
print("Failed to retrive data")
}
推荐阅读
- owl - Jena 模型验证 OntModel
- redis - WRONGTYPE 对持有错误类型值的键进行操作 redis
- java - Spring Boot中通过路径变量进行分页-控制器请求映射注释中不存在请求的路径变量
- python - Python中的三元运算符
- javascript - 我对反应导航身份验证流程有疑问
- docker - 如何使用 start 在 alpine docker 容器中加载 shell 别名
- nginx-reverse-proxy - 如何使 NGINX 反向代理以 HTTP 标头值为条件
- javascript - 如何在下一个 js 的项目中使用外部 js 库?
- angular - 使用 Angular CDK DRAG 在拖动元素上丢失旋转位置
- ffmpeg - 向ffmpeg m3u8文件添加标签的问题