Обновить
4K+
1
Антон Королев@p0rokh

iOS Developer

1
Рейтинг
1
Подписчики
Отправить сообщение

Как устроен.task в SwiftUI

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели5K

Вы задумывались, что такое модификатор .task {..} в SwiftUI?

Со стороны это просто особый Task {..} для вью. Он и выглядит как Task {..} с точкой спереди, и это сходство сбивает с толку. Я так к нему и относился: асинхронный блок, который SwiftUI запускает при появлении вью. Документация Apple говорит, что задача живет, пока вью сохраняет идентичность (identity), и SwiftUI отменяет ее, когда вью идентичность теряет, а про появление упоминает вскользь, одной фразой «Adds an asynchronous task to perform before this view appears». Выходит, запуск при каждом появлении вью, отмена при исчезновении. Где лежит сама задача и кто держит на нее ссылку, документация не говорит.

А держать задачу негде. Структура вью — это значение, SwiftUI пересоздает его при каждом пересчете body, и ссылка на Task внутри структуры умрет вместе с ней.

Проверьте себя. В каких из трех случаев задача внутри .task еще работает?

Читать далее

Информация

В рейтинге
1 877-й
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Разработчик мобильных приложений
Старший
Swift
SwiftUI
Swift Concurrency
Разработка под iOS
UIKit
MVVM
Xcode
GCD
Objective-С
Разработка мобильных приложений