Выбор ответа Middle SwiftUI спрашивают часто обновлено
Модификатор .task
Вопрос
Чем .task { await vm.load() } лучше, чем .onAppear { Task { await vm.load() } }?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: .task сам отменяет задачу, когда view исчезает. Задача модификатора .task привязана к жизни view: при исчезновении она отменяется, а с параметром id: перезапускается при смене значения.
Варианты ответа
.taskвыполняется до появления view на экране, аonAppearпосле.taskне требуетawaitи сам дожидается результата функции.taskвыполняет загрузку синхронно, не блокируя при этом интерфейс.taskсам отменяет задачу, когда view исчезаетправильный ответ
Разбор
Задача модификатора .task привязана к жизни view: при исчезновении она отменяется, а с параметром id: перезапускается при смене значения. В варианте с onAppear неструктурированная Task живёт сама по себе: пользователь ушёл, а загрузка продолжается и может записать результат в устаревшее состояние. Момент старта у них схожий. await нужен в обоих случаях.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.