在swift中强制转换为泛型类类型



我的目标是将从DB获取的结果返回到任何给定的类型(模型(。由于某种原因,我得到的错误是"使用未声明的类型'model'"。我在这里错过了什么?以及如何实现我的目标。

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")
}

在强制转换时,您希望使用as而不是is,并且要强制转换的类型是T而不是model,或者更确切地说,它是[T],因为它是一个数组,因此函数声明也需要修改

func fetchDsata<T>(entity:String, model: T.Type)-> [T]? {
let request = NSFetchRequest<NSFetchRequestResult>(entityName:entity)
request.returnsObjectsAsFaults = false
do {
let result = try managedObjectContext.fetch(request)
if result.count > 0 {
return result as? [T]
}
} catch {
print("Failed to retrive data")
}
return nil
}

最新更新