Ответ
URLSession — это основной фреймворк в iOS для выполнения сетевых операций по HTTP/HTTPS. Он поддерживает загрузку данных, файлов, фоновые задачи, аутентификацию и кэширование.
Ключевые компоненты:
URLSession: Объект сессии, координирующий группу связанных сетевых задач.URLSessionConfiguration: Определяет поведение сессии (кэширование, таймауты, использование сотовой сети). Основные типы:.default: Сессия с дисковым кэшем и куками..ephemeral: Сессия без сохранения данных на диск..background: Для выполнения задач, когда приложение не активно.
URLSessionTask: Абстрактный класс, представляющий задачу. Конкретные типы:URLSessionDataTask: Для получения данных в память.URLSessionDownloadTask: Для загрузки файлов на диск.URLSessionUploadTask: Для отправки данных (например, файлов).
Пример GET-запроса с использованием общей (shared) сессии:
// 1. Создание URL
let url = URL(string: "https://api.example.com/data")!
// 2. Создание задачи DataTask
let task = URLSession.shared.dataTask(with: url) { data, response, error in
// 3. Обработка ответа (выполняется в фоновом потоке)
if let error = error {
print("Network error: (error)")
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode) else {
print("Server error")
return
}
guard let data = data else { return }
// 4. Декодирование данных (например, в JSON)
do {
let decodedData = try JSONDecoder().decode(MyModel.self, from: data)
DispatchQueue.main.async {
// Обновление UI на главном потоке
self.updateUI(with: decodedData)
}
} catch {
print("Decoding error: (error)")
}
}
// 5. Запуск задачи
task.resume()
Важно: Для сложных сценариев (обработка редиректов, аутентификация, отслеживание прогресса) используется создание кастомной сессии с делегатом (URLSessionDelegate).