0Pricing
Swift Academy · Урок

Единый источник истины и однонаправленный поток

Проектируйте приложения SwiftUI с одной главной моделью состояния.

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

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

Однонаправленный поток данных означает, что состояние распространяется вниз по дереву представлений, а события — вверх. Единый авторитетный источник истины устраняет несогласованность.

Принцип

``` State → View → Event → State mutation → View re-renders ``` Представления являются чистыми функциями состояния. Они не определяют, каким должно быть состояние, — они только отображают его и порождают события.

Интерфейс на основе модели

```swift struct AppState { var count = 0; var filter: Filter = .all } struct AppView: View { @State var state = AppState() var body: some View { CounterView(state: state, onIncrement: { state.count += 1 }) } } ```

Как избежать дублирования состояния

```swift // ❌ Duplicate state — can drift out of sync: @State var isLoading = false @ObservedObject var viewModel: ViewModel // also has isLoading // ✓ Single source: @ObservedObject var viewModel: ViewModel // owns all state ```

Шаблон действий и событий

```swift enum CounterAction { case increment, decrement, reset } func reduce(state: inout AppState, action: CounterAction) { switch action { case .increment: state.count += 1 case .decrement: state.count -= 1 case .reset: state.count = 0 } } ```

TCA (компонуемая архитектура)

The Composable Architecture (с открытым исходным кодом) формализует этот шаблон в Swift с помощью редукторов, эффектов и хранилищ — подобно Redux в React.

Как избежать конфликтов двусторонней связи

```swift // ✓ Clear ownership: parent owns, child observes: struct Parent: View { @State private var text = "" var body: some View { Child(text: $text) } } struct Child: View { @Binding var text: String var body: some View { TextField("", text: $text) } } ```

Передача изменений вверх

Используйте замыкания (обратные вызовы), чтобы передавать события вверх: ```swift struct Child: View { var onDelete: () -> Void var body: some View { Button("Delete", action: onDelete) } } ```

Тестирование однонаправленного кода

Чистое состояние и чистый редуктор легко тестировать: ```swift var state = AppState() reduce(state: &state, action: .increment) XCTAssertEqual(state.count, 1) ```

Преимущества

• Предсказуемость: одинаковое состояние → одинаковый интерфейс • Удобство отладки: записывайте каждое действие и изменение состояния • Удобство тестирования: для тестов логики не нужен интерфейс • Отладка с перемоткой во времени: воспроизводите историю состояния

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

В однонаправленном потоке данных что вызывает изменение состояния?

Итоги

Основные выводы: • Состояние распространяется вниз, события — вверх • Один источник истины — никакого дублирования состояния • Используйте действия и редукторы для тестируемой логики изменения состояния • Обратные вызовы передают события от дочернего представления к родительскому • Чистое состояние + редуктор = простые модульные тесты Курс завершён! Далее: фреймворк Combine.

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

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

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

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

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

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

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

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

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

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

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

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

  1. @Binding: двусторонняя передача данных
  2. @ObservableObject и @StateObject
  3. @EnvironmentObject для общего состояния
  4. Единый источник истины и однонаправленный поток
← Назад к Swift Academy