Swift 如何处理返回值的函数的错误

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

我有一个函数,在创建记录之前检查核心数据记录是否存在,并返回一个布尔值:如果存在,则返回true;如果不存在,则返回false。里面嵌套了一个try,catch语句。在这样一个有return语句的场景中,如何正确处理错误?目前,我有check实现,但是如果catch被激活,就没有什么可以返回的。我可以返回true以停止录制,但这不是“true”

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文件时发生错误,只需假设它不存在即可