0Pricing
Swift Academy · Урок

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

Контракт издателя и подписчика, а также встроенные подписчики sink и assign.

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

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

Combine — реактивный фреймворк Apple. В его основе находятся издатели (создают значения) и подписчики (получают их).

Протокол Publisher

`Publisher` выдаёт значения с течением времени и в конце либо завершается, либо завершается с ошибкой: ```swift publisher .sink { print("Received: \($0)") } ``` Тип `Output` — это тип значения, а `Failure` — тип ошибки.

Подписчик: sink

```swift let nums = [1,2,3].publisher let cancel = nums.sink { print($0) } // 1, 2, 3 ```

Подписчик: assign

```swift class ViewModel { @Published var status = "" } let vm = ViewModel() statusPublisher .assign(to: &vm.$status) ```

AnyCancellable

Каждая подписка возвращает `AnyCancellable`. Сохраните его, чтобы подписка оставалась активной: ```swift var cancellables = Set() pub.sink { print($0) }.store(in: &cancellables) ```

Издатель Just

```swift Just(42).sink { print($0) } // emits once then completes ```

Издатель уведомлений

```swift NotificationCenter.default .publisher(for: UIApplication.didBecomeActiveNotification) .sink { _ in print("Active!") } .store(in: &cancellables) ```

Издатель таймера

```swift Timer.publish(every: 1, on: .main, in: .common) .autoconnect() .sink { date in print(date) } .store(in: &cancellables) ```

События завершения

```swift pub.sink( receiveCompletion: { completion in switch completion { case .finished: print("Done") case .failure(let e): print("Error: \(e)") } }, receiveValue: { print($0) } ) ```

Обратное давление

Combine поддерживает обратное давление — подписчики могут запрашивать определённое количество значений. Спрос `.unlimited` используется по умолчанию для `sink`.

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

Какой тип нужно сохранять, чтобы подписка Combine оставалась активной?

Итоги

Основные выводы: • Издатели выдают значения с течением времени, а подписчики получают их • `sink` получает значения и завершение, а `assign` связывает издатель со свойством • Сохраняйте `AnyCancellable`, чтобы подписки оставались активными • Встроенные издатели: `Just`, `Timer.publish`, NotificationCenter Далее: операторы.

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

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

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

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

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

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

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

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

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

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

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

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

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