Кто владеет async-работой экрана: .task, Task в модели, refreshable и отмена?
Суть
У любой асинхронной работы должен быть владелец, чьё время жизни совпадает с тем, сколько эта работа нужна. Владелец решает, когда её отменить. В SwiftUI-экране три уровня владения:
.task/.task(id:)— работа принадлежит идентичности view: отменяется при её исчезновении или сменеid. Загрузка данных экрана.Task, сохранённая в модели — работа принадлежит модели экрана: её отменяют по событию (новый запрос, кнопка «Стоп») и тестируют без UI.- Сервис уровня приложения — работа, которая должна пережить экран: отправка сообщения, загрузка файла, синхронизация. Экран ставит задачу в очередь сервиса и наблюдает за статусом.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep