Swift Academy · Урок

Сетевое взаимодействие с Combine и URLSession

Используйте URLSession.dataTaskPublisher вместе с Combine для обработки сетевых ответов.

Урок 4 из 412 шагов

«Сетевое взаимодействие с Combine и URLSession» — бесплатный урок Swift Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Добро пожаловать

URLSession имеет встроенную поддержку Combine через `dataTaskPublisher`. В сочетании с `decode` это позволяет создавать типобезопасные сетевые конвейеры всего за несколько строк.

dataTaskPublisher

```swift URLSession.shared .dataTaskPublisher(for: URL(string:"https://api.example.com/users")!) .sink(receiveCompletion: { print($0) }, receiveValue: { data, response in print(data.count) }) .store(in: &cancellables) ```

Декодирование JSON

```swift struct User: Decodable { var name: String; var id: Int } URLSession.shared .dataTaskPublisher(for: url) .map(\.data) .decode(type: [User].self, decoder: JSONDecoder()) .receive(on: DispatchQueue.main) .sink(receiveCompletion: { print($0) }, receiveValue: { users in self.users = users }) .store(in: &cancellables) ```

Обработка ошибок с помощью catch

```swift .catch { error -> AnyPublisher<[User],Never> in print("Error: \(error)") return Just([]).eraseToAnyPublisher() } ```

retry

```swift .retry(3) // retry up to 3 times on failure ```

Проверка HTTP-кода состояния

```swift .tryMap { data, response -> Data in guard let http = response as? HTTPURLResponse, (200...299).contains(http.statusCode) else { throw URLError(.badServerResponse) } return data } ```

Создание обобщённого издателя

```swift func fetch(_ url: URL) -> AnyPublisher { URLSession.shared.dataTaskPublisher(for: url) .map(\.data) .decode(type: T.self, decoder: JSONDecoder()) .eraseToAnyPublisher() } ```

Отмена

```swift var searchCancellable: AnyCancellable? searchCancellable?.cancel() // cancel previous searchCancellable = fetch(url).sink { ... } ```

flatMap для последовательных запросов

```swift fetch(userUrl) .flatMap { user in fetch(user.profileUrl) } .sink { profile in render(profile) } .store(in: &cancellables) ```

Объединение нескольких запросов

```swift Publishers.Zip(fetch(url1), fetch(url2)) .sink { a, b in combinedUI(a, b) } .store(in: &cancellables) ```

Быстрая проверка

Какой оператор Combine декодирует выходные данные издателя в тип Decodable?

Итоги

Основные выводы: • `dataTaskPublisher(for:)` — получение URL-данных на основе Combine • `.map(\.data)` → `.decode(type:decoder:)` для JSON • `.tryMap` проверяет HTTP-код состояния • `.retry(n)` выполняет автоматические повторные попытки • `.catch { }` предоставляет резервный издатель Курс завершён! Далее: структурированный параллелизм Swift.
Можно начать бесплатно

Изучай Swift с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
122
Уроки
409

Часто задаваемые вопросы

Урок «Сетевое взаимодействие с Combine и URLSession» бесплатный?

Да — полный текст урока «Сетевое взаимодействие с Combine и URLSession» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Сетевое взаимодействие с Combine и URLSession»?

Используйте URLSession.dataTaskPublisher вместе с Combine для обработки сетевых ответов. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Сетевое взаимодействие с Combine и URLSession»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Издатели и подписчики
  2. Операторы: map, filter, combineLatest
  3. PassthroughSubject и CurrentValueSubject
  4. Сетевое взаимодействие с Combine и URLSession
← Назад к Swift Academy