НовоеAI-конструктор резюме: правишь прямо на листе A4, а нейросеть подсказывает, что усилитьКонструктор резюме на листе A4Попробовать
JobPath
Начать бесплатно

iOSSeniorТехнический

Как обрабатывать ошибки в сетевых запросах

Встречался на собеседовании

Ответ

Что хотят услышать интервьюеры

Интервьюеры ожидают от кандидата понимания различных типов ошибок, которые могут возникать при выполнении сетевых запросов, эффективных стратегий обработки ошибок, а также применения best practices для улучшения пользовательского опыта. Кандидат должен продемонстрировать знание методов логирования, уведомления пользователя и повторных запросов.

Структурированный ответ

  1. Типы ошибок:

    • Клиентские ошибки (4xx): Например, 404 - ресурс не найден. Эти ошибки часто требуют обработки на уровне интерфейса.
    • Серверные ошибки (5xx): Например, 500 - внутренняя ошибка сервера. Эти ошибки могут указывать на проблемы с серверной частью.
    • Ошибки сети: Потеря подключения, тайм-ауты, ошибки DNS.
  2. Обработка ошибок:

    • Логирование: Используйте инструменты для логирования ошибок (например, Crashlytics) для отслеживания проблем.
    • Уведомление пользователя: Сообщайте пользователю о возникших ошибках с понятными сообщениями. Например, "Не удалось загрузить данные. Попробуйте еще раз."
    • Повторные запросы: Реализуйте логику повторных запросов для временных ошибок сети или сервера. Используйте exponential backoff для управления интервалами повторных попыток.
    • Fallback механизмы: Предоставьте кэшированные данные или альтернативные варианты, если запрос не удался.
  3. Пример кода:

import Foundation

func fetchData(from url: URL, completion: @escaping (Result<Data, Error>) -> Void) {
    let task = URLSession.shared.dataTask(with: url) { data, response, error in
        // Проверка на наличие ошибки
        if let error = error {
            print("Ошибка сети: \(error.localizedDescription)")
            completion(.failure(error))
            return
        }

        // Проверка кода ответа
        guard let httpResponse = response as? HTTPURLResponse else {
            print("Некорректный ответ")
            completion(.failure(NSError(domain: "", code: 0, userInfo: [NSLocalizedDescriptionKey: "Некорректный ответ"])))
            return
        }
        
        switch httpResponse.statusCode {
        case 200:
            // Успех
            if let data = data {
                completion(.success(data))
            }
        case 404:
            // Обработка ошибки 404
            completion(.failure(NSError(domain: "", code: 404, userInfo: [NSLocalizedDescriptionKey: "Ресурс не найден"])))
        default:
            // Обработка других ошибок
            completion(.failure(NSError(domain: "", code: httpResponse.statusCode, userInfo: [NSLocalizedDescriptionKey: "Ошибка сервера"])))
        }
    }
    task.resume()
}

Что могут спросить дальше

  • Объяснить, как использовать логирование для обработки ошибок.
  • Показать пример повторных запросов.
  • Обсудить обработку ошибок на уровне интерфейса.
  • Предложить улучшения для обеспечения лучшего UX.
Ответ помог?
Тренироваться бесплатно

Связаться с поддержкой

Выбери, где удобнее написать