Обработка ошибок, Firestore


#1

Добрый день. У меня есть такой код, который запрашивает из Firestore документ:

func getDocument(_ document: String, fromCollection collection: String, completion: @escaping (FirestoreResponse<[String: Any], Error>) -> Void) {
    
    let reference = db.collection(collection).document(document)

    reference.getDocument { (snapshot, error) in

    }
}

Моя проблема заключается в том, что я ни капли не понимаю, как я должен обработать абсолютно все ошибки, которые в теории могут случиться. Допустим, нет подключения к Интернет, не существует снэпшот, данные не передались в полном объеме и т.д.

Должен ли где-то находиться список ошибок? Каждый случай должен быть обработан через guard let, к примеру?


#2

Насколько я понимаю, обработчик сам выдаст ошибку (вернёт error, если у вас по каким-либо причинам не вернётся снапшот. Это у вас и так указано в клоужере. соотвественно вы получите error. Далее его просто обработайте if'ом и всё. Может можно лучше, но я пока только так знаю)

Можно сделать либо так:

guard let snapshot = snapshot else {return}

или

if let error = error {
    print(error.localizedDescription)
}

P.S. создавал отдельную тему именно по cloud firestore - если что, пишите вопросы туда: тама будем аккумулировать знания. Я помогу (или вы), тоже пилю проект в этом. направлении.


#3

Отчасти вы правы. Если я пишу

if let error = error {
    print(error.localizedDescription)
}

и у меня нет подключения к сети, например, ошибка будет поймана:

Error Domain=FIRFirestoreErrorDomain Code=14 “Failed to get document because the client is offline.”
UserInfo={NSLocalizedDescription=Failed to get document because the client is offline.}

А если включаю сеть и добавляю

        guard let snapshot = snapshot else {
            print("\(error!)")
            return
        }

        guard snapshot.exists else {
            print("Error = \(error)")
            return
        }

то приходит Error = nil. То есть вроде как снэпшота и нет (специально указываю неверную ссылку), но и ошибка nil. Не понимаю почему так происходит.

Хорошо, все последующие вопросы буду оставлять в вашей теме :slight_smile: Только будет ли удобно потом осуществлять поиск? Искать по теме – просто, а по постам?