Какой у вас опыт работы с сетевыми запросами в iOS?

«Какой у вас опыт работы с сетевыми запросами в iOS?» — вопрос из категории Сети, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, есть опыт работы с сетевыми запросами в iOS. Основные технологии и практики:

  • URLSession для нативных запросов.
  • Alamofire для упрощения сложных задач и улучшения читаемости кода.
  • Codable для сериализации и десериализации JSON.
  • Обработка ошибок, кэширование (URLCache), авторизация (OAuth 2.0, JWT) и загрузка файлов (multipart/form-data).

Пример использования URLSession с Codable и обработкой ошибок:

struct User: Codable {
    let id: Int
    let name: String
}

enum NetworkError: Error {
    case invalidURL
    case noData
    case decodingError
}

func fetchUser(completion: @escaping (Result<User, Error>) -> Void) {
    guard let url = URL(string: "https://api.example.com/user/1") else {
        completion(.failure(NetworkError.invalidURL))
        return
    }

    let task = URLSession.shared.dataTask(with: url) { data, response, error in
        if let error = error {
            completion(.failure(error))
            return
        }

        guard let data = data else {
            completion(.failure(NetworkError.noData))
            return
        }

        do {
            let user = try JSONDecoder().decode(User.self, from: data)
            completion(.success(user))
        } catch {
            completion(.failure(NetworkError.decodingError))
        }
    }
    task.resume()
}

Почему Codable? Он обеспечивает типобезопасность, уменьшает объем шаблонного кода и интегрируется со Swift-типами. Для сложных API часто используется архитектура с отдельным NetworkService, инкапсулирующим логику запросов.