Ответ
URLSession — это основной класс для выполнения сетевых HTTP/HTTPS-запросов в iOS/macOS.
Пример простого GET-запроса:
// 1. Определяем URL
let url = URL(string: "https://api.github.com/users/apple")!
// 2. Создаем и запускаем задачу (dataTask) на shared сессии
let task = URLSession.shared.dataTask(with: url) { data, response, error in
// 3. Обрабатываем ответ в completion handler (выполняется в фоновом потоке)
// Проверяем на ошибку сети
if let error = error {
print("Network error: (error.localizedDescription)")
return
}
// Проверяем HTTP статус-код
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode) else {
print("Server returned an error")
return
}
// Парсим полученные данные (JSON)
guard let data = data else { return }
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
print("Successfully received JSON: (json)")
} catch {
print("JSON parsing error: (error)")
}
}
task.resume() // 4. Не забываем запустить задачу
Ключевые моменты:
URLSession.shared— синглтон для простых запросов. Для кастомных настроек (таймауты, кеширование) создают экземплярURLSession(configuration:).- Асинхронность: Запрос не блокирует главный поток.
- Типы задач: Помимо
dataTask, существуютdownloadTask(для файлов) иuploadTask.
Ответ 18+ 🔞
А, ну вот, смотри, классика жанра, блядь! URLSession — это типа твой главный по тачкам, который будет кататься по интернетам и таскать данные, как последний курьер. В iOS и macOS без него нихуя, если ты, конечно, не хочешь вручную сокеты ебашить, на что у тебя терпения ноль ебать.
Вот тебе простейший пример, как спиздить инфу с какого-нибудь сервака (GET-запрос):
// 1. Тыкаешь пальцем в адрес, куда слать запрос
let url = URL(string: "https://api.github.com/users/apple")! // Во, посмотрим, что там у Эппл в профиле
// 2. Берёшь общую сессию (shared) и говоришь: "Слушай, дружище, сгоняй-ка туда"
let task = URLSession.shared.dataTask(with: url) { data, response, error in
// 3. А это колбэк, который вызовется, когда твой гонец вернётся (и будет он в каком-то левом потоке, имей в виду!)
// Первым делом — не наебал ли он тебя? Может, связи нет?
if let error = error {
print("Сеть, сука, глючит: (error.localizedDescription)")
return
}
// Теперь смотрим, что сервер тебе ответил. Не послал ли он тебя нахуй с кодом 404?
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode) else {
print("Сервер выдал какую-то дичь вместо нормального ответа")
return
}
// Окей, вроде не послал. Данные-то принёс?
guard let data = data else { return } // А если нет, то и делать нихуя
// Пытаемся разобрать эту абракадабру, обычно JSON
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
print("Ура, блядь, JSON в кармане: (json)")
} catch {
print("А JSON-то кривой, распарсить не могу: (error)")
}
}
task.resume() // 4. САМОЕ ГЛАВНОЕ, ёпта! Не забудь дать пинка под зад, чтобы задача ПОЕХАЛА. А то так и будет висеть.
На что тут смотреть, чтобы не облажаться:
URLSession.shared— это как такси общее. Удобно, дёшево, но если тебе нужны особые понты (свои таймауты, кеширование или куки), то заказывай личную машину черезURLSession(configuration:).- Всё это дело — асинхронное. Пока запрос ползёт, твой интерфейс не зависнет, пользователь может дальше тыкать в кнопки. Красота.
- Задачи бывают разные.
dataTask— для обычных данных. Хочешь скачать файл на диск —downloadTask. Хочешь что-то отправить —uploadTask. Выбирай, что надо, блядь.