我做了一个泛型方法,它从核心数据库返回最后一条记录,但是在return语句中:return _lastItem as! [T]
表示Thread X: signal SIGABRT
。我该怎么解决?
func lastRecord<T: NSManagedObject>(_ type : T.Type, sort: NSManagedObject? = nil) -> [T] {
let _context = DataBaseController.persistentContainer.viewContext
let _request = T.fetchRequest()
_request.fetchLimit = 1
do {
let _result = try _context.fetch(_request)
if !_result.isEmpty {
let _lastItem = _result[0]
return _lastItem as! [T]
} else {
return _result as! [T]
}
} catch {
print("Error : \(error)")
return []
}
}
提前谢谢!!
最佳答案
如注释中所述,_result[0]
是单个对象(T
),强制转换为数组([T]
)将崩溃。
另一个问题是返回类型是一个数组,或者保留返回类型
do {
let _result = try _context.fetch(_request) as! [T]
if !_result.isEmpty {
return [_result[0]]
} else {
return _result
}
} catch { ...
或者将返回类型更改为可选(
T?
)func lastRecord<T: NSManagedObject>(_ type : T.Type, sort: NSManagedObject? = nil) -> T? { ...
那么代码就是
do {
let _result = try _context.fetch(_request) as! [T]
return _result.first
} catch { ...
旁注:在Swift中,局部变量的前导下划线字符是非常不寻常的。
关于swift - 核心数据库最后记录的通用方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42300588/