我正在尝试将我的下面的core data fetch请求代码转换为通用类型。
let request = NSPredicate(format: "name == %@ AND password == %@ AND type == %@", "admin", "admin", "admin")
let fetchReq : NSFetchRequest = UserRegistration.fetchRequest()
fetchReq.predicate = request
let adminDetail :[UserRegistration] = DatabaseEngine.fetch(fetchRequest: fetchReq)!
目前已转换:
extension UIViewController{
class func getData<T: NSManagedObject>(req: NSPredicate) -> T{
let fetchReq : NSFetchRequest = T.fetchRequest()
fetchReq.predicate = req
return DatabaseEngine.fetch(fetchRequest: fetchReq as! NSFetchRequest<NSManagedObject>)! as! T
}
}
DatabaseEngine.fetch函数。
static func fetch (fetchRequest: NSFetchRequest<T> = NSFetchRequest(), context:NSManagedObjectContext = kApplicationDelegate.managedObjectContext) -> [T]? {
let entity = NSEntityDescription.entity(forEntityName: typeName(some:T.self)
, in:context)
// Configure Fetch Request
fetchRequest.entity = entity
do {
return try context.fetch(fetchRequest as! NSFetchRequest<NSFetchRequestResult>) as? [T]
} catch {
//let fetchError = error as NSError
// return nil
}
return nil
}
但是再也没有结果了。有人能帮我用简洁的代码转换一下吗?感谢您的帮助。
[T]
。但是,正如我已经说过的,如果没有看到DatabaseEngine.fetch
的定义,我无法给出确切的答案。顺便说一句,强制解包返回值和强制转换似乎都不是一个好主意,除非您百分之百确定结果永远不会是nil
(在这种情况下,首先定义函数返回可选项就没有意义)。 - Dávid PásztorUIViewController
无关),限制为NSManagedObject
并带有静态方法(static methods),所有NSManagedObject
子类都可以采用。而将错误(throw
ing errors)转换为可选项(optionals),会使得智能错误处理变得更糟糕。请使用getData
can throw并传递抛出的错误。 - vadian