Swift Academy · Урок

@Published и наблюдение в Combine

Разберитесь, как @Published работает внутри и передаёт изменения через издатели Combine.

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

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

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

`@Published` — это обёртка свойства из платформы Combine, которая отправляет новое значение через издатель при каждом изменении свойства.

Основы @Published

```swift import Combine class Counter: ObservableObject { @Published var count = 0 } let c = Counter() let cancel = c.$count.sink { print("Count: \($0)") } c.count += 1 // "Count: 1" c.count += 1 // "Count: 2" ```

Протокол ObservableObject

```swift class ViewModel: ObservableObject { @Published var title = "Initial" @Published var items: [String] = [] } ``` Любой класс, соответствующий `ObservableObject`, автоматически получает издатель `objectWillChange`.

Издатель objectWillChange

```swift class VM: ObservableObject { @Published var name = "" } let vm = VM() let cancel = vm.objectWillChange.sink { print("Will change") } vm.name = "Alice" // "Will change" printed before assignment ```

@Published с @StateObject в SwiftUI

```swift @StateObject var vm = ViewModel() // In View body: Text(vm.title) // Re-renders when vm.title changes ``` `@StateObject` владеет ViewModel, а `@ObservedObject` наблюдает объект, которым владеет внешний код.

Объединение издателей из @Published

```swift class Search: ObservableObject { @Published var query = "" @Published var results: [String] = [] private var cancellables = Set() init() { $query .debounce(for: 0.3, scheduler: RunLoop.main) .sink { [weak self] q in self?.search(q) } .store(in: &cancellables) } } ```

@Published отправляет значение до присваивания

`objectWillChange` срабатывает *до* сохранения нового значения: ```swift vm.objectWillChange.sink { _ in print("will change") } $count.sink { n in print("is \(n)") } // Order: "will change" then "is 1" ```

Хранение подписок

```swift var cancellables = Set() c.$count .sink { print("\($0)") } .store(in: &cancellables) // cancellables keeps subscription alive ```

Ограничения @Published

• Только в классах (ссылочных типах) • Нельзя использовать с константами `let` • Не работает через границы акторов без явной изоляции • Значение отправляется *до* завершения присваивания (семантика willSet)

Макрос наблюдения (Swift 5.9+)

Swift 5.9 представляет `@Observable` как более простой вариант: ```swift @Observable class Counter { var count = 0 } // No Combine import needed; SwiftUI auto-subscribes ```

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

Когда `@Published` отправляет значение — до или после установки свойства?

Итоги

Основные выводы: • `@Published var x` предоставляет `$x` как `Publisher` • `ObservableObject` автоматически получает издатель `objectWillChange` • Издатель срабатывает до сохранения нового значения (willSet) • Храните подписки в `Set` • Swift 5.9: `@Observable` заменяет большинство случаев использования `@Published` Далее: композиция обёрток свойств.
Можно начать бесплатно

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

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

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

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

Урок «@Published и наблюдение в Combine» бесплатный?

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

Чему я научусь в уроке «@Published и наблюдение в Combine»?

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

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

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

Сколько времени занимает урок «@Published и наблюдение в Combine»?

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

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

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

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

  1. Создание собственного оболочечного свойства
  2. Проецируемые значения с помощью $binding
  3. @Published и наблюдение в Combine
  4. Композиция нескольких оболочек свойств
← Назад к Swift Academy