Выбор ответа Middle SwiftUI спрашивают часто обновлено

Модификатор .task

Вопрос

Чем .task { await vm.load() } лучше, чем .onAppear { Task { await vm.load() } }?

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

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

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

Коротко

Правильный ответ: .task сам отменяет задачу, когда view исчезает. Задача модификатора .task привязана к жизни view: при исчезновении она отменяется, а с параметром id: перезапускается при смене значения.

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

  1. .task выполняется до появления view на экране, а onAppear после
  2. .task не требует await и сам дожидается результата функции
  3. .task выполняет загрузку синхронно, не блокируя при этом интерфейс
  4. .task сам отменяет задачу, когда view исчезаетправильный ответ

Разбор

Задача модификатора .task привязана к жизни view: при исчезновении она отменяется, а с параметром id: перезапускается при смене значения. В варианте с onAppear неструктурированная Task живёт сама по себе: пользователь ушёл, а загрузка продолжается и может записать результат в устаревшее состояние. Момент старта у них схожий. await нужен в обоих случаях.

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

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