Как обрабатывать ошибки для функций, возвращающих значение - PullRequest
0 голосов
/ 01 марта 2020

У меня есть функция, которая проверяет, существует ли запись данных Core перед созданием записи, и возвращает логическое значение: true, если оно существует, false, если нет. Внутри вложен оператор try, catch. Как я могу правильно обработать ошибку в подобном сценарии, где есть оператор возврата? В настоящее время у меня есть реализация check, но если улов активирован, возвращать нечего. Я могу вернуть 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
    }
}

1 Ответ

1 голос
/ 01 марта 2020

Если вы думаете, что ваш 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
}

В вызывающей стороне вы можете do...catch сообщить об ошибке, и, надеюсь, (если вызывающая сторона должна вернуть значение), может вернуть значимое значение, даже если произошла ошибка.

Если вызывающая сторона все еще не может вернуть значимое значение, вы распространяете ошибку снова, и в конечном итоге достичь того, который обрабатывает пользовательский ввод или что-то (что не возвращает значение). Там вы увидите сообщение об ошибке для пользователя.


В зависимости от вашей конструкции, возвращение false при возникновении ошибки также может быть вариантом - если ошибка возникает при доступе к файлу БД, просто предположим, что его не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...