Вступить в клуб →
сложнаявопросUIKit и SwiftUI: экраны и состояние

Modifying state during view update: почему нельзя присваивать @State внутри body

struct FilterView: View {
    @State private var isEmpty = false
    let items: [Item]

    var body: some View {
        isEmpty = items.isEmpty

        return VStack {
            if isEmpty { Text("Ничего не найдено") }
            List(items) { item in Text(item.title) }
        }
    }
}

В консоли появляется предупреждение «Modifying state during view update», экран иногда зацикливается на перерисовках. Что здесь неверно по сути?

  • body перестаёт быть чистым: присваивание @State внутри него запускает новый проход обновления
  • @State нельзя менять из структуры, потому что она неизменяемая; нужно объявить body как mutating
  • Предупреждение уходит, если обернуть присваивание в DispatchQueue.main.async — это и есть корректное решение
  • Нужно заменить @State на @StateObject: изменения объекта из body безопасны

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела