Всем привет! На
WWDC26 показали то, о чем разработчики просили с момента появления
AsyncImage в
iOS 15 - поддержку кэширования.
Что изменилось:
Раньше
AsyncImage при каждом появлении вьюхи на экране отправлял запрос в сеть, даже если вы только что загрузили данное изображение. Разработчики выкручивались своими силами: писали кастомные обертки, подключали сторонние библиотеки, вручную сохраняли изображения на диск.
В новой версии достаточно указать политику кэширования в
URLRequest:
AsyncImage(request: URLRequest(
url: imageURL,
cachePolicy: .returnCacheDataElseLoad
))
Если картинка уже есть в кэше - она берется из него. Никаких дополнительных запросов.
Когда это будет полезно:
Новая возможность пригодится во многих сценариях, например:
- Ленты новостей и соцсетей: аватарки и прикрепленные изображения не будут перезагружаться при скролле вверх-вниз.
- Каталоги и маркетплейсы: карточки товаров с фотографиями грузятся один раз и остаются в кэше.
- Галереи и фотоальбомы: превьюшки не дергают сеть при каждом возврате к списку.
- Мессенджеры и почтовые клиенты: аватарки контактов и вложенные картинки подгружаются повторно только если действительно изменились.
- Офлайн-сценарии: при слабом сигнале или полном отсутствии сети пользователь увидит уже загруженные ранее изображения, а не пустые места.
Вывод:
На
WWDC26 наконец-то доделали то, что должно было работать с момента появления
AsyncImage. Кэширование - базовая вещь, которую в
UIKit завезли еще много лет назад. Все это время разработчикам приходилось решать задачу, которая вообще не должна была существовать. Но теперь эта проблема осталась в прошлом.
Седьмой год
SwiftUI, а мы все еще радуемся базовым вещам. Но прогресс есть и это здорово.