SwiftUI Academy · Урок

Издатели и подписчики

Разберитесь в основном потоке Combine.

Урок 1 из 413 шагов

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

Знакомство с Combine

Combine — это платформа Apple для обработки значений, поступающих со временем, например нажатий, таймеров или ответов сети. 🌊

Значения во времени

Вместо однократного запроса данных Вы описываете поток значений и реагируете каждый раз, когда поступает новое значение — сразу или позднее.

Что делает издатель

Издатель — это источник. Он передаёт значения дальше и сообщает, когда завершает работу или завершается с ошибкой.

let publisher = [1, 2, 3].publisher

Результат и сбой

Каждый издатель объявляет два типа: свой результат (значения, которые он отправляет) и тип сбоя (ошибка, которую он может выдать).

Just(42) // Output: Int, Failure: Never

Что делает подписчик

Подписчик подключается к издателю, получает каждое поступающее значение и решает, что с ним делать.

Подключение с помощью sink

Подписчик sink — самый простой вариант: Вы передаёте ему замыкание, которое выполняется для каждого полученного значения.

publisher.sink { value in
    print(value)
}

Обработка завершения

Более полный sink принимает два замыкания: одно для завершения (успешного или с ошибкой), а другое — для каждого значения.

publisher.sink(
    receiveCompletion: { print($0) },
    receiveValue: { print($0) }
)

Сохранение подписки

Подписка возвращает объект, который можно отменить. Сохраняйте его, иначе поток будет немедленно прерван.

var bag = Set<AnyCancellable>()
publisher.sink { _ in }
    .store(in: &bag)

Just и Empty

Just выдаёт одно значение и завершает работу. Empty завершается, не выдавая ни одного значения. Оба варианта удобны как строительные блоки.

let one = Just("hello")

Субъекты отправляют значения

PassthroughSubject позволяет вручную отправлять значения и идеально подходит для передачи событий, которыми Вы управляете.

let subject = PassthroughSubject<Int, Never>()
subject.send(5)

Поток с вытягиванием и отправкой

Подписчик сообщает о потребности, издатель отправляет значения, а завершение корректно прекращает отношения между ними.

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

Вы добавили замыкание к издателю, но ничего не вывелось. Что, скорее всего, пошло не так?

Итоги: три компонента Combine

Вы познакомились с тремя участниками: издатель выдаёт значения, подписчик получает их, а сохранённый объект отмены поддерживает связь активной. 🎉

Можно начать бесплатно

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

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

Курсы
30
Уроки
120

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

Урок «Издатели и подписчики» бесплатный?

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

Чему я научусь в уроке «Издатели и подписчики»?

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

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

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

Сколько времени занимает урок «Издатели и подписчики»?

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

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

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

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

  1. Издатели и подписчики
  2. Преобразование с map и filter
  3. Debounce для живого поиска
  4. Связывание Combine со SwiftUI
← Назад к SwiftUI Academy