Как сообщить / распространить ошибки Firestore с контекстом сайта вызова в recordError - PullRequest
0 голосов
/ 25 января 2020

Я использую Firestore для сохранения данных, и все примеры обработки ошибок в документах Firestore и результатах Google по сути имеют один и тот же, в частности, не богатый шаблон:

.setData(user.documentData) { error in
          if let error = error {
            print("Error writing user to Firestore: \(error)")
          }
        }

Однако я хотел бы добавить контекст о сайте вызова (который я пытался написать пользователю, в приведенном выше примере) к ошибке вместо получения обобщенного описания локализованного описания FireStore c ошибка записи данных не удалось при записи ошибки и распространения ошибки. Например:

.setData(user.documentData) { error in
          if let error = error {
            Crashlytics.sharedInstance().recordError(error)
            print("Error writing user to Firestore: \(error)")
            completion(.failure(error))
          }
        }

Существует ли шаблон для создания пользовательской ошибки Swift с перечислением Error, которое начинается с ошибки Firestore, чтобы сохранить ее контекст и добавить контекст приложения ошибки? Существуют ли другие подходы к предоставлению информации локального контекста о том, что не удалось записать в ошибке FireStore?

1 Ответ

0 голосов
/ 12 февраля 2020

Я реализовал это на основе поста SwiftBySundell, который кажется подходящим.

enum FireStoreError : Error {
  case userWriteError(String)
  ....
}

extension FireStoreError : LocalizedError {
  var localizedDescription : String? {
    switch self {
    case .userWriteError(let s): return NSLocalizedString("Unable to persist user: \(s)", comment: "")
    }
  }
}

.setData(user.documentData) { error in
          if let error = error {
            let userError = FireStoreError.userWriteError(error.localizedDescription)
            Crashlytics.sharedInstance().recordError(userError)
            completion(.failure(userError))
          }
        }

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