我制作了一个通用方法,该方法从核心数据库返回最后一条记录,但在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 []
}
}
提前致谢!!
答案 0 :(得分:1)
正如评论_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中非常不寻常。