0Pricing
SwiftUI Academy · Урок

Как избежать лишней перерисовки

Ограничивайте область состояния, чтобы сократить повторные вычисления body.

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

Части этого урока еще не переведены и отображаются на английском.

The Cost of Over-Updating

If a tiny change forces a huge view to rebuild, scrolling stutters. The fix is to keep each redraw as small as possible.

State Lives Where It Changes

Put @State in the smallest view that owns it. Then only that little view re-evaluates when the value flips, not its big parent.

struct Counter: View {
    @State private var count = 0
}

Extract Subviews

Break a large body into smaller subviews. SwiftUI can then diff and skip the pieces whose inputs did not change.

var body: some View {
    HeaderView()
    FeedView()
}

Pass Only What You Need

Hand a subview just the values it reads. The fewer dependencies a view has, the less often it must recompute.

RowView(title: item.title)

Watch Observable Reads

With @Observable models, a view updates only for the exact properties it touches. Read just the fields you display.

Avoid Wide State Objects

One giant model read everywhere makes every change ripple outward. Split it so each view depends on a narrow slice of data.

Beware Closures Capturing Self

A closure that reads many properties widens a view's dependencies. Capture only the specific value the action truly needs.

Move Heavy Work Out of body

Never do expensive computing inside body. It runs often, so cache results in state or a model and read the finished value.

Use let for Constants

Mark unchanging inputs as let. Constant properties never trigger updates, signaling clearly that they cannot cause a redraw.

struct Badge: View {
    let label: String
}

Equatable Views

For costly subviews, make them Equatable so SwiftUI can compare inputs and skip re-evaluation when they match.

ExpensiveView(data: data)
    .equatable()

Optimize What You Measure

Do not guess. Scope state, extract views, then measure to confirm you actually shrank the redraws that hurt.

Quick Check

Where should you place state to limit redraws?

Recap: Avoiding Redraws

You learned to scope state tightly, extract subviews, pass minimal data, and keep body cheap. Smaller dependencies mean fewer redraws. ⚡

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

Урок «Как избежать лишней перерисовки» бесплатный?

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

Чему я научусь в уроке «Как избежать лишней перерисовки»?

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

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

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

Сколько времени занимает урок «Как избежать лишней перерисовки»?

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

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

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

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

  1. Как SwiftUI пересчитывает представления
  2. Как избежать лишней перерисовки
  3. Ленивая загрузка тяжёлого содержимого
  4. Профилирование с Instruments
← Назад к SwiftUI Academy