Swift 如何处理返回值的函数的错误
我有一个函数,在创建记录之前检查核心数据记录是否存在,并返回一个布尔值:如果存在,则返回true;如果不存在,则返回false。里面嵌套了一个try,catch语句。在这样一个有return语句的场景中,如何正确处理错误?目前,我有check实现,但是如果catch被激活,就没有什么可以返回的。我可以返回true以停止录制,但这不是“true”Swift 如何处理返回值的函数的错误,swift,function,error-handling,Swift,Function,Error Handling,我有一个函数,在创建记录之前检查核心数据记录是否存在,并返回一个布尔值:如果存在,则返回true;如果不存在,则返回false。里面嵌套了一个try,catch语句。在这样一个有return语句的场景中,如何正确处理错误?目前,我有check实现,但是如果catch被激活,就没有什么可以返回的。我可以返回true以停止录制,但这不是“true” func checkIfExists(id: String) -> Bool{ let fetchRequest: NSFetchRequ
func checkIfExists(id: String) -> Bool{
let fetchRequest: NSFetchRequest<Conversions> = Conversions.fetchRequest()
let predicate = NSPredicate(format: "id == %@", id)
fetchRequest.predicate = predicate
fetchRequest.fetchLimit = 1
do {
let count = try PersistenceService.context.count(for: fetchRequest)
if (count == 0){
return false
} else {
return true
}
}
catch let error {
print("Could not fetch \(error)")
return true // missing return in function
}
}
func checkIfExists(id:String)->Bool{
let fetchRequest:NSFetchRequest=Conversions.fetchRequest()
let谓词=NSPredicate(格式:“id==%@”,id)
fetchRequest.predicate=谓词
fetchRequest.fetchLimit=1
做{
let count=try PersistenceService.context.count(for:fetchRequest)
如果(计数=0){
返回错误
}否则{
返回真值
}
}
捕捉错误{
打印(“无法获取\(错误)”)
return true//函数中缺少return
}
}
如果您认为您的checkIfExists
方法无法优雅地处理错误。这是一个很好的迹象,表明错误应该传播到调用方并在那里处理:
func checkIfExists(id: String) throws -> Bool{
let fetchRequest: NSFetchRequest<Conversions> = Conversions.fetchRequest()
let predicate = NSPredicate(format: "id == %@", id)
fetchRequest.predicate = predicate
fetchRequest.fetchLimit = 1
let count = try PersistenceService.context.count(for: fetchRequest)
return count != 0
}
func checkIfExists(id:String)抛出->Bool{
let fetchRequest:NSFetchRequest=Conversions.fetchRequest()
let谓词=NSPredicate(格式:“id==%@”,id)
fetchRequest.predicate=谓词
fetchRequest.fetchLimit=1
let count=try PersistenceService.context.count(for:fetchRequest)
返回计数!=0
}
在调用者中,您可以do…catch
错误,并且希望(如果调用者需要返回一个值),即使发生错误也可以返回一个有意义的值
如果调用者仍然无法返回有意义的值,那么您将再次传播错误,最终您将到达一个处理用户输入或其他内容(不返回值)的位置。在那里,您将向用户显示一条错误消息
根据您的设计,在发生错误时返回
false
也可能是一个选项-如果在访问DB文件时发生错误,只需假设它不存在即可