Выбор ответа Middle SwiftUI обновлено

Побочные эффекты в body

Вопрос

Почему нельзя запускать сетевой запрос прямо в body?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: body вызывается часто и непредсказуемо: запрос уйдёт много раз. body это чистая функция от состояния: SwiftUI вызывает её при любом изменении зависимостей, при анимациях, при пересоздании родителя.

Варианты ответа

  1. body выполняется в фоновом потоке, и запрос не сможет обновить UI
  2. body вызывается только один раз, и повторить запрос будет нельзя
  3. body вызывается часто и непредсказуемо: запрос уйдёт много разправильный ответ
  4. В body нельзя использовать замыкания, а запрос требует completion

Разбор

body это чистая функция от состояния: SwiftUI вызывает её при любом изменении зависимостей, при анимациях, при пересоздании родителя. Побочные эффекты кладут в .task, .onAppear, .onChange или в действия кнопок. Изменение состояния прямо в body даёт предупреждение «Modifying state during view update» и может зациклить обновления. body выполняется на главном акторе.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.